Witam mam taki problem, mianowicie czy da się jakoś za pomocą klasy FileWriter pisać w dowolnym miejscu w pliku tzn. np żeby sobie skoczyć do przypuścmy 5 linijki pliku i tam zacząć pisać? Bo miałem taki pomysł żeby użyć LineReadera na poczatku programu, zeby znalezc w której linijce mam pisać, a potem jakoś wlaśnie przy pomocy FileWritera do tej linijki skoczyć i tam zacząć pisać, tylko ze nie mam pojęcia jak to zrobic. Probówałem wcześniej to zrobić przy pomocy klasy RandomAccessFile, jednak ona nie wiadomo czemu powodowala ucinanie miejscami tekstu i dopisywała nieporządane znaki. Generalnie chodzi o to że to jest lista najlepszych wyników do każdego poziomu gry i po prostu trzeba dopisać inta do pliku w wybranym miejscu. Pozdrawiam
- Rejestracja:prawie 14 lat
- Ostatnio:ponad 10 lat
- Postów:5

- Rejestracja:prawie 20 lat
- Ostatnio:około 2 godziny
RandomAccessFile, jednak ona nie wiadomo czemu powodowala ucinanie miejscami tekstu i dopisywała nieporządane znaki.
NiepoŻądane. Pokaż kod. Klasa RandomAccessFile powinna działać OK, innych klas ci tu nie trzeba w tym przypadku. Czy musisz korzystać z plików tekstowych? Ja bym skorzystał z serializacji do przechowywania danych na dysku.
- Rejestracja:prawie 14 lat
- Ostatnio:ponad 10 lat
- Postów:5
Tak muszę czytać, struktura pliku z rekordami mniej więcej wygląda tak
LEVEL1
1212232
LEVEL2
133123
Program ma działać tak, po zakończeniu każdego poziomu program otwiera plik z wynikami, szuka w nim danego poziomu i nadpisuje lub zostawia przypisany do niego najlepszy wynik. Oto kod metody która to robi:
public void setHighScore() {
try {
RandomAccessFile plik = new RandomAccessFile("wyniki.txt","rw");
String k = new String();
while ((k = plik.readLine())!= null){
if (k.equals(levelname)) {
long tx = plik.getFilePointer();
int t = Integer.parseInt(plik.readLine()); // to poprzedni najlepszy wynik
plik.seek(tx);
if (t < counter.getResult()) // counter.getResult() zwraca moj wynik po ukonczeniu danego poziomu w postaci inta
//plik.writeInt(counter.getResult()); wersja pierwsza pisania - wypisuje totalne krzaki
plik.writeUTF(Integer.toString(counter.getResult())); //- tu wypisuje liczbę ale dodaje jeszcze jakies spacje i znaczki
}
}
} catch (Exception E) {}
}

- Rejestracja:prawie 20 lat
- Ostatnio:około 2 godziny
W takim razie co się stanie, jeżeli np plik ma postać: 123456<koniec>,a potem wpisujesz do niego wartość 789? Będzie wyglądał tak: 789456. Aby zrobić dobrze zapisywanie, musisz po prostu za każdym razem kasować plik i generować od nowa, z nowymi danymi. Albo skorzystać z serializacji (ObjectOutputStream/ ObjectInputStream). Będzie jeszcze prościej. writeInt() zapisuje 4 bajty, bez konwertowania na ASCII czy UTF-8, więc to chyba nie dziwne, że przy potraktowaniu surowych danych jako tekstu dostajesz krzaki. Zresztą masz dokumentację (javadoc), w której jest to przecież opisane.
Czy te rekordy maja konkretna strukture? Typu najpierw nawza levela, max 20 bajtow, pozniej wynik int, 4 bajty, pozniej nazwa usera, max 20 bajtow (wielkosci zmyslone). Jesli tak, to RandomAccessFile doskonale sie do tego nadaje - chcesz zmienic rekord 20? int recNo = 20; ... raf.seek((20 + 4 + 20) * (n - 1)); raf.write() i tutaj swoje dane, z paddingiem stringow jesli sa krotsze.