Чтение данных из двоичного файла (Java)?
Для класса, над которым я работаю, я должен создать программу, которая записывает двоичные данные в файл (на основе пользовательского ввода), а затем читает их на консоль. Это делается с помощью двух отдельных программ, одна из которых обрабатывает данные, а другая получает пользовательский ввод. Всякий раз, когда я пытаюсь составить список содержимого файла, он печатает последний элемент снова и снова. В чем проблема с моим кодом?
Вот соответствующая часть программы, которая обрабатывает пользовательский ввод и выводит на консоль:
String song = null;
try
{
DataInputStream read = new DataInputStream(
new FileInputStream( fileName ));
while( read.available() > 0 )
{
song = process.readSong( fileName );
System.out.println( song );
}
}
catch( Exception e )
{
System.out.println( "Error" );
}
Вот соответствующая часть программы, которая обрабатывает данные и читает их из двоичного файла:
public String readSong( String fileName )
{
DataInputStream in = null;
String sTitle;
String sArtist;
String sGenre;
String song = null;
try
{
in = new DataInputStream(
new BufferedInputStream(
new FileInputStream( fileName )));
sTitle = in.readUTF();
sArtist = in.readUTF();
sGenre = in.readUTF();
song = sTitle + "\t" + sArtist + "\t" + sGenre;
in.close();
}
catch( Exception ex )
{
System.out.println( "Error" );
}
return song;
}
2 ответа
Ваш DataInputStream
объект никогда не изменяется, потому что DataInputStream in
является локальным для функционирования readSong()
,
Вам необходимо передать ссылку на ваш DataInputStream
объект читается в функции readSong()
,
Так что звонок должен быть song = process.readSong( fileName , read );
и удалить местный DataInputStream in
от вашей функции readSong()
Поместите цикл while в метод readSong, тогда только он будет читать файл построчно. В то время как в первом методе цикл не требуется, вам просто нужно передать имя файла методу readsong.