gpt4 book ai didi

java - 使用 scala 代码从 Windows 中的共享文件夹复制大量日志文件

转载 作者:行者123 更新时间:2023-12-02 04:20:30 24 4
gpt4 key购买 nike

我正在尝试使用 scala 代码将大量文件(数百万个)从网络共享复制到我的电脑。我使用的方法是 listfiles() 来获取文件夹中的所有文件,然后遍历列表来复制我想要的文件。对于小型文件来说,它工作得很好。文件,但作为没有。文件数量达到数百万,它会抛出内存越界异常。是否有任何其他方法可以用来迭代文件并选择我想要复制的方法,该方法不会在 java 或 scala 中抛出此异常。当我用谷歌搜索这个问题时,我看到了简单的文件访问者,任何人都可以帮助我了解如何在从文件夹过滤后使用它来复制文件。

def copyRenamedFiles(directoryName: String, trackerFileName: String, loggerFileName: String): Unit = {
val destFolder = "D:\\data\\"
val logWriter = Logger.getLogger("UploadServiceLog")
logWriter.setUseParentHandlers(false)
val hashMapForFileTracking = FileTracking.getTracker(trackerFileName, logWriter)
try {
println("Inside try block")
//LogFile Informations........................
val fh = new FileHandler(loggerFileName)
logWriter.addHandler(fh)
val formatter = new SimpleFormatter()
fh.setFormatter(formatter)
//............................................
if (!new File(directoryName).exists()) {
throw new FileNotFoundException("Specified Path is not found")
}
val rootFile = new File(directoryName)
println(rootFile.isDirectory)
if (rootFile.isDirectory) {
// println("Inside rootfolder\n"+rootFile.listFiles().length)
rootFile.listFiles().foreach {
machineFile => if (machineFile.isDirectory) {

// My filter logic and copying goes here

}

但是rootFile.listFiles(也是rootFile.list)本身会抛出内存越界异常。文件夹层次结构是根文件夹 -> 许多机器文件夹 -> 每个机器文件夹包含许多 dailylogfolders -> 每个 daily 文件夹包含一个日志文件。

最佳答案

如果您的问题是文件数组太大而无法放入内存,您应该考虑如何获取延迟计算的内容,例如 Stream 或 Iterator。快速搜索,我发现了这个:

http://www.adam-bien.com/roller/abien/entry/listing_directory_contents_with_jdk

这是从上面的链接复制的

public static List<String> fileList(String directory) {
List<String> fileNames = new ArrayList<>();
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get(directory))) {
for (Path path : directoryStream) {
fileNames.add(path.toString());
}
} catch (IOException ex) {}
return fileNames;
}

它是新的 java io 库的一部分,展示了如何创建不应该占用您全部内存的 DirectoryStream。

关于java - 使用 scala 代码从 Windows 中的共享文件夹复制大量日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32823227/

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