Zapis do kolekcji z pliku

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 :)

0

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

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);
}
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.

0

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

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.

0
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.

0
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");
                }
        }
}
0
if(args.length>0)
                {
                      songs.safetoFile(args[0]);
                }
                else
                {
                      System.out.println("Brak nazwy pliku docelowego");
                }

Nie rozumiem jak to dokładnie działa ?

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.

0

Jakbym zrobił coś takiego:

songs.safetoFile(nazwaPliku);

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

0

Jakbyś zrobił tak

songs.safetoFile("nazwaPliku");

to zapisze do pliku nazwaPliku.

0

program kompiluje, uruchamia się ale nie zapisuje ;/

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.

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