Je veux remplacer le contenu du fichier de deuxième ligne, quelqu'un peut-il m'aider s'il vous plaît en fonction du format de fichier ci-dessous et de la méthode d'écoute.
1324254875443
1313131
Paid
0.0
La 2ème ligne est longue et veut remplacer par currentTimeMillis()
.
/************** Pay Button Listener **************/
public class payListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
ArrayList<String> lines = new ArrayList<String>();
String line = null;
try {
FileReader fr = new FileReader("Ticket/" + ticketIDNumber + ".dat");
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("Ticket/" + ticketIDNumber + ".dat");
BufferedWriter bw = new BufferedWriter(fw);
while ((line = br.readLine()) != null) {
if (line.contains("1313131"))
line.replace(System.currentTimeMillis();
lines.add(line);
bw.write(line);
} //end if
} //end try
catch (Exception e) {
} //end catch
} //end while
}//end method
Comme proposé dans la réponse acceptée à ne question similaire :
ouvrir un fichier temporaire en écriture en même temps, et pour chaque ligne, le lire, le modifier si nécessaire, puis écrire dans le fichier temporaire. À la fin, supprimez l'original et renommez le fichier temporaire.
En fonction de votre implémentation, quelque chose de similaire à:
import Java.io.BufferedReader;
import Java.io.BufferedWriter;
import Java.io.File;
import Java.io.FileReader;
import Java.io.FileWriter;
import Java.io.IOException;
public class ReplaceFileContents {
public static void main(String[] args) {
new ReplaceFileContents().replace();
}
public void replace() {
String oldFileName = "try.dat";
String tmpFileName = "tmp_try.dat";
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader(oldFileName));
bw = new BufferedWriter(new FileWriter(tmpFileName));
String line;
while ((line = br.readLine()) != null) {
if (line.contains("1313131"))
line = line.replace("1313131", ""+System.currentTimeMillis());
bw.write(line+"\n");
}
} catch (Exception e) {
return;
} finally {
try {
if(br != null)
br.close();
} catch (IOException e) {
//
}
try {
if(bw != null)
bw.close();
} catch (IOException e) {
//
}
}
// Once everything is complete, delete old file..
File oldFile = new File(oldFileName);
oldFile.delete();
// And rename tmp file's name to old file name
File newFile = new File(tmpFileName);
newFile.renameTo(oldFile);
}
}
Bien que cette question soit très ancienne, je voudrais ajouter que cela peut être réalisé beaucoup plus facilement puisque Java 1.7 avec Java.nio.file.Files
:
List<String> newLines = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8)) {
if (line.contains("1313131")) {
newLines.add(line.replace("1313131", ""+System.currentTimeMillis()));
} else {
newLines.add(line);
}
}
Files.write(Paths.get(fileName), newLines, StandardCharsets.UTF_8);
Je pourrais suggérer d'utiliser la bibliothèque Apache Commons IO . Vous y trouverez la classe org.Apache.commons.io.FileUtils . Tu peux l'utiliser:
File file = new File("... your file...");
List<String> lines = FileUtils.readLines(file);
lines.set(1, ""+System.currentTimeMillis());
FileUtils.writeLines(file, lines);
Ce code lit l'intégralité du contenu du fichier dans un List of String
s et modifie le contenu de la deuxième ligne, puis réécrit la liste dans le fichier.
Je ne suis pas sûr que lire et écrire le même fichier simultanément soit une bonne idée. Je pense qu'il serait préférable de lire le fichier ligne par ligne dans un tableau String
, de remplacer la deuxième ligne, puis de réécrire le tableau String
dans le fichier.