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