对于我正在处理的类,我必须创建一个程序,该程序将二进制数据写入文件(基于用户输入(,然后将其读取到控制台。这是通过两个单独的程序完成的,一个处理数据,另一个获取用户输入。每当我尝试列出文件的内容时,它都会一遍又一遍地打印最后一项。我的代码有什么问题?
以下是处理程序的相关部分,用于处理用户输入并打印到控制台:
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;
}
您的DataInputStream
对象永远不会被修改,因为DataInputStream in
是函数readSong()
的本地
。您需要传递在函数readSong()
中读取的DataInputStream
对象的引用。
因此,应song = process.readSong( fileName , read );
调用并从函数中删除本地DataInputStream in
readSong()
把 while 循环放在 readSong 方法中,然后只有它会逐行读取文件。 虽然第一种方法不需要循环,但您只需要将文件名传递给 ReadSong 方法。