私は java.util.Scanner を使用して、次のコードでクラスパスからファイルの内容を読み取ります:
String path1 = getClass().getResource("/myfile.html").getFile();
System.out.println(new File(path1).length()); // 22244 (correct)
String file1 = new Scanner(new File(path1)).useDelimiter("\\Z").next();
System.out.println(file1.length()); // 2048 (first 2k only)
コードはコマンドでアイデアから実行されます (maven テスト)
/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java -Dmaven.home=/usr/share/java/maven-3.0.4 -Dclassworlds.conf=/usr/share/java/maven-3.0.4/bin/m2.conf -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 12 CE.app/bin" -Dfile.encoding=UTF-8 -classpath "/usr/share/java/maven-3.0.4/boot/plexus-classworlds-2.4.jar:/Applications/IntelliJ IDEA 12 CE.app/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher --fail-fast --strict-checksums test
私のwin7マシンで完全に動作していました。しかし、Mac に移行した後、同じテストが失敗します。私はググってみましたが、あまり見つかりませんでした =(
区切り記号 \Z を使用したスキャナーが、win7 ではファイル全体を文字列に読み取りますが、Mac ではそれを実行しないのはなぜですか? ファイルを読み取る方法が他にもあることは知っていますが、このワンライナーが好きで、なぜ機能しないのかを理解したいと思っています。ありがとう。