Zapis do kolekcji z pliku

Zapis do kolekcji z pliku
SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Witam potrzebuję wskazówek jak stworzyć metodę, która wczyta piosenki z pliku melodies.txt i zwróci nam kolekcję piosenek.

Z góry dziękuje i pozdrawiam :)

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Piszesz o kolekcji piosenek, zakładam że to tylko niezręczność i chodzi Ci o kolekcję tytułów.

Kopiuj
ArrayList<String> titles = new ArrayList<String>();
try
{
      Scanner scanner = new Scanner(new FileReader("Piosenki.txt"));
      while (scanner.hasNext())
      {
           titles.add(scanner.next());
      }
}
catch(Exception e)
{
      System.out.println(e);
}
SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Dziękuje, a teraz chciałbym "naskrobać" metodę która ma zapisać tą kolekcję do pliku, ale używając serializacji Javowej do pliku zadanego argumentem programu.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli będziesz zapisywał w metodzie main, to np. tak:

Kopiuj
FileOutputStream f = new FileOutputStream(new File(args[0]));
ObjectOutputStream oos = new ObjectOutputStream(f);
oos.writeObject(titles);
oos.flush();
f.close();

Jeśli gdzie indziej, to musisz zapamiętać args[0] w jakimś polu albo przekazywać z funkcji do funkcji.

SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0
Kopiuj
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

public class Song {
	private String title;
	private String artist;
	private float duration;

	
	public void readReturn() {
	ArrayList<String> titles = new ArrayList<String>();
	try
	{
	      Scanner scanner = new Scanner(new FileReader("songs.txt"));
	      while (scanner.hasNextLine())
	      {
	           titles.add(scanner.nextLine());
	      }
	      System.out.println(titles);
	}
	catch(Exception e)
	{
	      System.out.println(e);
	}
	}
	public void safetoFile(){
		FileOutputStream f = new FileOutputStream(new File(args[0]));
		ObjectOutputStream oos = new ObjectOutputStream(f);
		oos.writeObject(titles);
		oos.flush();
		f.close();
	}
	public static void main(String args[]) {
		Song songs = new Song();
		songs.readReturn();
		songs.safetoFile();
	}
}
	

Jak w tym wypadku sobie poradzic z args[0] ?
Pytania może kolokwialne ale jestem początkujący w javie.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Song {
        private String title;
        private String artist;
        private float duration;
 
        public void readReturn() {
        ArrayList<String> titles = new ArrayList<String>();
        try
        {
              Scanner scanner = new Scanner(new FileReader("songs.txt"));
              while (scanner.hasNextLine())
              {
                   titles.add(scanner.nextLine());
              }
              System.out.println(titles);
        }
        catch(Exception e)
        {
              System.out.println(e);
        }
        }
        public void safetoFile(String fileName){
                FileOutputStream f = new FileOutputStream(new File(fileName));
                ObjectOutputStream oos = new ObjectOutputStream(f);
                oos.writeObject(titles);
                oos.flush();
                f.close();
        }
        public static void main(String args[]) {
                Song songs = new Song();
                songs.readReturn();
                if(args.length>0)
                {
                      songs.safetoFile(args[0]);
                }
                else
                {
                      System.out.println("Brak nazwy pliku docelowego");
                }
        }
}
SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0
Kopiuj
if(args.length>0)
                {
                      songs.safetoFile(args[0]);
                }
                else
                {
                      System.out.println("Brak nazwy pliku docelowego");
                }

Nie rozumiem jak to dokładnie działa ?

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

args to tablica argumentów przekazanych do programu, może być pusta (args.length == 0). Wtedy nie wiesz do jakiego pliku serializować kolekcję. Zatem nie serializujesz tylko wyświetlasz odpowiedni komunikat.

SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Jakbym zrobił coś takiego:

Kopiuj
songs.safetoFile(nazwaPliku);

To zapisze do pliku nazwaPliku ? Chyba nie tak...

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Jakbyś zrobił tak

Kopiuj
songs.safetoFile("nazwaPliku");

to zapisze do pliku nazwaPliku.

SO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

program kompiluje, uruchamia się ale nie zapisuje ;/

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Który program się kompiluje? Ten co wyżej nie ma prawa się skompilować. A dlaczego nie działa program, którego nie zamieściłeś, to wie tylko wróżka. Po niezbędnych poprawkach (obsługa błędów w metodzie savetoFile, zmienna lokalna titles zamieniona na pole w klasie) działa i zapisuje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.