Attualmente sto scrivendo il mio progetto per la scuola in cui mi richiede di leggere e scrivere su file txt. Posso leggerli correttamente ma posso solo scriverli alla fine da un FileWriter allegato. Mi piacerebbe essere in grado di sovrascrivere le cose nei miei file txt su numeri di linea cancellando prima i dati sulla linea e poi scrivendo nei nuovi dati. Ho provato a utilizzare questo metodo ...Come posso scrivere su un numero di linea specifico in un file txt in Java
public void overWriteFile(String dataType, String newData) throws IOException
{
ReadFile file = new ReadFile(path);
RandomAccessFile ra = new RandomAccessFile(path, "rw");
int line = file.lineNumber(path, dataType);
ra.seek(line);
ra.writeUTF(dataType.toUpperCase() + ":" + newData);
}
ma credo che il metodo di ricerca si sposti in byte anziché in numeri di riga. Qualcuno può aiutare. Grazie in anticipo :)
P.S. il metodo file.lineNumber restituisce la riga esatta su cui si trovavano i vecchi dati, quindi ho già il numero di riga su cui scrivere.
MODIFICA: trovato solista! Grazie ragazzi :) vi posterò la soloution qui sotto se qualcuno è interessato
public void overWriteFile(String dataType, String newData, Team team, int dataOrder) throws IOException
{
try
{
ReadFile fileRead = new ReadFile(path);
String data = "";
if(path == "res/metadata.txt")
{
data = fileRead.getMetaData(dataType);
}
else if(path == "res/squads.txt")
{
data = fileRead.getSquadData(dataType, dataOrder);
}
else if(path == "res/users.txt")
{
data = fileRead.getUsernameData(dataType, dataOrder);
}
else if(path == ("res/playerdata/" + team.teamname + ".txt"))
{
//data = fileRead.getPlayerData(dataType, team.teamname, dataOrder);
}
BufferedReader file = new BufferedReader(new FileReader(path));
String line;
String input = "";
while((line = file.readLine()) != null)
{
input += line + '\n';
}
input = input.replace(dataType.toUpperCase() + ":" + data, dataType.toUpperCase() + ":" + newData);
FileOutputStream out = new FileOutputStream(path);
out.write(input.getBytes());
}
catch(Exception e)
{
System.out.println("Error overwriting file: " + path);
e.printStackTrace();
}
}
Se non si conosce la lunghezza di ciascuna riga, non è possibile accedere casualmente a una determinata riga. Basta copiare tutte le linee fino a tingere quello che stai cercando, quindi scrivere la sua sostituzione, quindi scrivere il resto delle linee. –