gpt4 book ai didi

Java:如何让 File.listOfFiles 在 Linux 上非递归工作?

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:14 25 4
gpt4 key购买 nike

我使用这段代码来查找我的程序的另一部分在给定目录中创建的 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 并将其复制到子目录(基于 boolean 值 postWasSuccedful 的“已发送”或“失败”)和删除原件,因此不会再次发送。

在 Windows 中,这按预期工作,但我已将工作代码转移到 Linux 机器上,突然间它进入了发送 bla.xml 的循环中,一秒钟后发送\bla.xml 并再次发送一秒钟之后是 sent\sent\bla.xml 之后是 sent\sent\sent\bla.xml 等。

为什么 Linux 自己决定 listFiles() 是递归的?而且,更好的是,如何防止这种情况发生?我可以在 if 语句中添加一个额外的检查,查找以 .xml 结尾的文件,文件名中不允许有目录字符,但这是我不想要的解决方法,因为选择中的文件数量- up 目录永远不会很高,而发送的子目录中的文件数量会在一段时间后变得相当高,我不希望这段代码变慢

最佳答案

我的灵力告诉我,reproduceXmlFile() 使用硬编码反斜杠 ("\") 构建目标路径名,因此您实际上是在创建文件他们的名字中有反斜杠。

您需要使用 File.separator 而不是硬编码的 "\"。或者使用类似 new File("sent", fileName).toString() 的东西来生成你的输出路径名。

(如有错误请见谅!)

关于Java:如何让 File.listOfFiles 在 Linux 上非递归工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19053437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com