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 :)
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 :)
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);
}
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.
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.
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.
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");
}
}
}
if(args.length>0)
{
songs.safetoFile(args[0]);
}
else
{
System.out.println("Brak nazwy pliku docelowego");
}
Nie rozumiem jak to dokładnie działa ?
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.
Jakbym zrobił coś takiego:
songs.safetoFile(nazwaPliku);
To zapisze do pliku nazwaPliku ? Chyba nie tak...
Jakbyś zrobił tak
songs.safetoFile("nazwaPliku");
to zapisze do pliku nazwaPliku.
program kompiluje, uruchamia się ale nie zapisuje ;/
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.