Bazı verilerin olduğu, birden çok belgeden seçip yeni bir dosya oluşturduğum bir program yazıyorum.Verileri her zaman taze olarak dosyaya yaz
Kodum aşağıda.
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();
}
}
Bu program ilk kez düzgün çalışıyor. Dosya doğru şekilde oluşturuluyor. Ancak sorun, bunu tekrar çalıştırdığımda ortaya çıkıyor, yeni bir veri oluşturmak yerine ekleniyor. Bunun FileOutputStream fos = new FileOutputStream(temp, true);
nedeniyle olduğundan eminim, true
'u kaldırırsam, her dosya bittiğinde yeni bir kopya güncellenir. Ama benim ihtiyacım, mevcut olana eklenmek yerine, programı her çalıştırdığımda yeni bir veri yaratmak.
10 dosya diyorum ve programı çalıştırıyorum, tüm 10 dosyanın içeriği geçici dosyaya gitmeli. Tekrar çalıştırıyorum, olması gerektiği gibi, geçici dosyayı temizliyorum. Bu 10 dosyanın içeriğini yazınız. ama şu anda programı çalıştırıyorum, veriler geçici dosyaya yazılıyor, tekrar çalıştırıyorum, aynı 10 dosya verisine ekleniyor. Tam içeriği değiştirmek istiyorum, ancak tek tek dosya içeriği. İlk çalıştırdığımda, 10 dosya verisi geçici dosyaya yazılır. Tekrar çalıştırıyorum, geçici dosya temizlenmeli ve bu 10 dosya verisi yazılmalıdır.
Lütfen bunu nasıl yapabilirim?
Teşekkür
[Java varolan bir çıktı dosyasının üzerine yazma] 'nın kopyası (http://stackoverflow.com/questions/17957849/java-overwriting-an-existing-output-file)? –
Sanırım sorun aynı dosya adıyla. Dosya adında zaman damgasını eklemeyi deneyin. Yani her seferinde yeni dosya oluşturacak. – sAm
Merhaba @TomRees, hayır öyle değil. Yukarıdaki problemden açıkça bahsetmiştim. – Rakesh