提问人:JeroenV 提问时间:9/27/2013 更新时间:9/27/2013 访问量:180
Java:如何让File.listOfFiles在linux上以非递归方式工作?
Java: How to get File.listOfFiles working non-recursively on linux?
问:
我使用这段代码来查找程序的另一部分在给定目录中创建的 XML 文件:
String fileName;
File folder = new File(mainController.XML_FILES_LOCATION);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
fileName = listOfFiles[i].getName();
if (fileName.endsWith(".xml")) {
Document readFile = readFoundXmlFile(fileName);
if (readFile != null) {
boolean postWasSuccesful = mainController.sendXmlFile(readFile, fileName);
reproduceXmlFile(readFile, fileName, postWasSuccesful);
deleteXmlFile(fileName);
}
}
}
}
它的作用是读取放置在给定目录中的每个 XML 文件,将其发送到 URL 并将其复制到子目录(基于布尔值 postWasSuccedful 的“已发送”或“失败”)并删除原始文件,这样它就不会再次发送。
在 Windows 中,这按预期工作,但是我已经将工作代码传输到 Linux 机器上,突然间它进入了发送 bla.xml 的循环中,一秒钟后发送\bla.xml,一秒钟后再次发送\sent\bla.xml,然后是发送\sent\sent\bla.xml,等等。
为什么 Linux 自己决定 listFiles() 是递归的??而且,更好的是,如何防止这种情况发生?我可以在 if 语句中添加一个额外的检查,以查找以 .xml 结尾的文件,该文件名中不允许目录字符,但这是我不想要的解决方法,因为拾取目录中的文件量永远不会很高,而发送子目录中的文件量在一段时间后可能会变得相当高,我不希望这段代码变得很慢
答:
3赞
RichieHindle
9/27/2013
#1
我的精神力量告诉我,使用硬编码的反斜杠 () 构建目标路径名,因此您实际上是在创建名称中带有反斜杠的文件。reproduceXmlFile()
"\"
您需要使用而不是硬编码。或者使用类似的东西来生成输出路径名。File.separator
"\"
new File("sent", fileName).toString()
(如果我错了,请道歉!
评论
0赞
Ingo
9/27/2013
你的精神力量真的很强大。顺便说一句,我不知道有任何理由在任何地方实际使用 \,/ 在 Windows 中工作正常......
评论