Ser*_*i M 7 java windows macos java.util.scanner
我正在使用java.util.Scanner从classpath读取文件内容,使用以下代码:
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)
Run Code Online (Sandbox Code Playgroud)
代码从命令运行(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
Run Code Online (Sandbox Code Playgroud)
它在我的win7机器上完美运行.但在我搬到mac后,同样的测试失败了.我试着谷歌但没有找到多少=(
为什么Scanner with delimiter\Z在win7上将我的整个文件读成一个字符串,但不会在mac上执行?我知道有更多的方法来阅读文件,但我喜欢这个单行,并想了解它为什么不起作用.谢谢.
有一篇关于这种完全读取文件的方法的好文章Scanner:
http://closebraces.net/2011/12/17/scanner-with-z-regex/
\n\n简单来说:
\n\n\n\n\n因为以 \xe2\x80\x9c/z\xe2\x80\x9d 作为分隔符的单次读取应该读取\n所有内容,直到输入 \xe2\x80\x9d 的 \xe2\x80\x9cend 为止,因此 \xe2\x80\x99s就像上面列出的示例所做的那样,很容易只执行一次读取并保留它。
\n\n在大多数情况下,\xe2\x80\x99s 没问题,但我\xe2\x80\x99 发现至少一种情况\n 读取输入\xe2\x80\x9cend 的\xe2\x80\x9d 不\xe2\x80\当输入是 SequenceInputStream 时,x99t 会读取整个输入 \xe2\x80\x93,每个组成的 InputStream\n 似乎都会给出其自己的输入\xe2\x80\x9d 的单独 \xe2\x80\x9cend。因此,如果\n 使用 \xe2\x80\x9c/z\xe2\x80\x9d 分隔符执行一次读取,它将返回 SequenceInputStream\xe2\x80\x99s 组成流中第一个的内容\n ,但\n 不会\xe2\x80\x99 读入其余组成流。
\n
使用时要小心。最好逐行阅读,或者使用hasNext()检查直到它成为真实的false。
UPD:换句话说,试试这个代码:
\n\nStringBuilder file1 = new StringBuilder();\nScanner scanner = new Scanner(new File(path1)).useDelimiter("\\\\Z");\n\nwhile (scanner.hasNext()) {\n file1.append(scanner.next());\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |