W jaki sposób mogę użyć metod klasy RandomAccessFile,zeby odwrócić kolejność liczb w pliku?

0

Zadanie:

  1. Napisać funkcję odwrocKolejnosc, która korzystając z klasy RandomAccessFile utworzy plik binarny z 10 liczbami całkowitymi wylosowanymi z przedziału [0, 100).
    W następnym kroku należy odwrócić kolejność liczb w pliku, nie korzystając przy tym z pomocniczych struktur danych (np. tablicy), ale odpowiednio przesuwając pozycję
    w pliku za pomocą metod klasy RandomAccessFile. Ścieżka do pliku powinna być przekazana jako parametr.

static void odwrocKolejnosc(String nazwaPliku){
		RandomAccessFile raccess = null;
		Random rn = new Random();
		try {
			raccess = new RandomAccessFile(nazwaPliku, "rw");
			for(int i=0; i<10; i++){
				raccess.writeInt(rn.nextInt(101));
			}
			
			raccess.seek(0);
			for(int i=0; i<10; i++){
				System.out.println(raccess.readInt());
			}

		    
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally{
			try {
				raccess.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

1

Hej,
jeżeli dobrze zrozumiałem, to będą Ci potrzebne chyba dwie metody... Pierwsza do tworzenia losowych liczb i zapisanie tych liczb w pliku... I druga metoda, która zrobi Reverse, czyli odwrócenie danych w pliku... W drugiej metodzie wykorzystaj może taką konstrukcję (znalezione w sieci):

for (long i = 0, j = plikraf.length() - 1; i < j; i++, j--) {
      plikraf.seek(i);
      x = plikraf.read();
      plikraf.seek(j);
      y = plikraf.read();

      plikraf.seek(j);
      plikraf.write(x);
      plikraf.seek(i);
      plikraf.write(y);
    }

Pozdrawiam... :)

0
	static void odwrocKolejnosc(String nazwaPliku){
		RandomAccessFile raccess = null;
		Random rn = new Random();
		try {
			raccess = new RandomAccessFile(nazwaPliku, "rw");
			for(int i=0; i<10; i++){
				raccess.writeInt(rn.nextInt(101));
			}
			
			raccess.seek(0);
			for(int i=0; i<10; i++){
				System.out.println(raccess.readInt()); //tutaj inty wyświetlają się prawidłowo takie jakie są normalnie
			}
			
			
			long j=raccess.length();
			for(long i=0; i<j; i++){
				raccess.seek(j);
				int x=raccess.read();
				raccess.seek(i);
				int y=raccess.read();
				
				raccess.seek(j);
				raccess.write(y);
				raccess.seek(i);
				raccess.write(x);
				j--;
			}
			
			
			raccess.seek(0);
			for(int i=0; i<10; i++){
				System.out.println(raccess.readInt()); // a tutaj w zależności od tego czy wezmę read, czy readInt to wyskakują liczby całkowicie nie związane z tymi które wylosowałem wcześniej
			}
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally{
			try {
				raccess.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1