我一直在使用下面的成语一段时间了.它似乎是最广泛的,至少在我访问过的网站上.
是否有更好/不同的方式将文件读入Java中的字符串?
private String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
Run Code Online (Sandbox Code Playgroud) 我试图一次处理一个通过网络存储的文件.由于缓冲不是问题,因此读取文件很快.我遇到的问题只是列出文件夹中的目录.在许多文件夹中,每个文件夹至少有10k个文件.
由于File.list()返回数组而不是iterable,因此性能非常慢.Java关闭并收集文件夹中的所有名称,并在返回之前将其打包到数组中.
这个错误条目是http://bugs.sun.com/view_bug.do;jsessionid=db7fcf25bcce13541c4289edeb4?bug_id=4285834并且没有解决方法.他们只是说这已经为JDK7修复了.
几个问题:
Perl和PHP用反引号做到这一点.例如,
$output = `ls`;
Run Code Online (Sandbox Code Playgroud)
返回目录列表.类似的函数system("foo")返回给定命令foo的操作系统返回码.我在谈论一个将foo打印返回到stdout的变体.
其他语言如何做到这一点?这个函数有一个规范名称吗?(我要用"反击";但也许我可以用"syslurp"硬币.)
在Windows中,是否有一种简单的方法来判断文件夹是否有更改的子文件?
我验证了,当子文件更改时,文件夹上的最后修改日期不会更新.
我可以设置一个可以修改此行为的注册表项吗?
如果重要,我正在使用NTFS卷.
我最终希望从C++程序中获得这种能力.
递归扫描整个目录对我来说不起作用,因为文件夹太大了.
更新:我确实需要一种方法来实现这一点,而不会在更改发生时运行进程.因此,安装文件系统观察器对我来说并不是最佳选择.
Update2:存档位也不起作用,因为它与上次修改日期有同样的问题.将设置文件的存档位,但文件夹不会.
java ×3
file ×2
c++ ×1
directory ×1
file-io ×1
filesystems ×1
io ×1
ntfs ×1
performance ×1
string ×1
terminology ×1
windows ×1