I am currently writing my project for a school in which I need to read and write to txt files. I can read them correctly, but I can only write at the end of the added FileWriter. I would like to be able to overwrite things in my txt files with line numbers, first deleting the data on the line and then writing new data. I tried using this method ...
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); }
but I believe the search method moves in bytes, not line numbers. Can someone help. Thanks in advance:)
PS the file.lineNumber method returns the exact line that the old data was in, so I already have the line number to be written.
EDIT: found Soloution! Thanks guys :) I will send permission below if anyone is interested
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(); } }
source share