Чтение данных из двоичного файла (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.

Другие вопросы по тегам