【发布时间】:2013-06-23 03:34:39
【问题描述】:
我正在使用 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)
代码从idea用命令运行(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 上却不行? 我知道有更多的方法可以读取文件,但我喜欢这种单线并想了解它为什么不起作用。 谢谢。
【问题讨论】:
-
除此之外,您不会在测试中比较 like 和 like -
File.length()给出了 bytes 的长度,而String.length()给出了 的长度i>字符。它没有解释这里的区别,但它仍然是一个奇怪的比较。文件里有什么? -
mac 不区分大小写吗?您是否尝试使用小写
\\z? -
@fmodos 有趣的
\\z给出前 1024 个字节,其中\\Z2048 -
@fmodos:这些在正则表达式中意味着不同的东西。这不是文件名 - 除了文件名之外,我不知道您在谈论 Mac 和 Windows 之间的区分大小写差异。
-
@JonSkeet 它是 HTML 文件,22244 是它的正确大小(以字节为单位)
标签: java windows macos java.util.scanner