gpt4 book ai didi

java - 每次都将数据新鲜写入文件

转载 作者:行者123 更新时间:2023-12-02 03:45:14 26 4
gpt4 key购买 nike

我正在编写一个程序,其中有一些数据,我必须从多个文档中选择这些数据并创建一个新文件。

下面是我的代码。

public class IndexFiles extends SwingWorker<Void, String> {
private String inputPath;

public IndexFiles(String inputPath) {
this.inputPath = inputPath;
}

@Override
protected Void doInBackground() throws Exception {
File directory = new File(inputPath);
countFilesInDirectory(directory);
return null;
}

void countFilesInDirectory(File directory) throws IOException {
System.out.println("entered");
File[] list = directory.listFiles();
System.out.println("length is " + list.length);
for (int i = 0; i < list.length; i++) {
GenerateFiles(list[i].getAbsoluteFile().toString());
}

}

private void GenerateFiles(String inputfilePath) throws IOException {
String input = inputfilePath;
URL url = new URL("file:///" + input);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String inputLine;

String tempPath = inputfilePath.substring(0, inputfilePath.lastIndexOf("\\") + 1);
String secPath = tempPath.substring(0, tempPath.lastIndexOf("\\"));
String finalPath = secPath.substring(0, secPath.lastIndexOf("\\")) + "\\OP\\";

File outPath = new File(finalPath);
if (!outPath.exists()) {
outPath.mkdir();
}
File temp = new File(finalPath + "temp.txt");
FileOutputStream fos = new FileOutputStream(temp, true);

if (!temp.exists()) {
temp.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write("");
while ((inputLine = in.readLine()) != null) {
if (inputLine.contains("/section")) {
break;
}
if (inputLine.contains("DOCTYPE")) {
inputLine = inputLine.replace("<!DOCTYPE html>", "");
}
if (inputLine.contains("html")) {
inputLine = inputLine.replaceAll(
"<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"content-type\" content=\"text/html\" charset=\"utf-8\"/>(.*)<section>",
"");
}
if (inputLine.contains("?")) {
inputLine = inputLine.replace("<?", "");
}
if (inputLine.contains("pb")) {
inputLine = inputLine.replaceAll("pb label=\"(.*)\"?>", "");
}
if (!(inputLine.trim().isEmpty())) {
bw.append(inputLine);
bw.newLine();
}
}
bw.close();
in.close();

}

}

这个程序第一次运行良好。文件已正确创建。但是当我再次运行它时,问题就出现了,它被附加而不是创建新的数据。我确信这是因为 FileOutputStream fos = new FileOutputStream(temp, true);,如果我删除 true,每次文件完成时,都会生成一个新副本得到更新。但我的要求是每次运行程序时创建一个新数据,而不是附加到现有数据中。

我说了 10 个文件,然后我运行该程序,所有 10 个文件的内容都应该进入临时文件。我再次运行它,应该是这样的,我清除了临时文件。写入这10个文件的内容。但现在,我运行该程序,数据被写入临时文件,我再次运行它,它附加了相同的 10 个文件数据。我想替换完整内容,而不是单个文件内容。第一次运行时,10 个文件数据被写入临时文件中。我再次运行它,临时文件应该被清除并写入这10个文件的数据。

最佳答案

选择一个:

  • 在 countFilesInDirectory 中创建不带 true-flag 的 BufferedWriter 并将其作为参数传递给GenerateFiles
  • 添加代码以删除 countFilesInDirectory 中 for 循环之前的临时文件

关于java - 每次都将数据新鲜写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355128/

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