对于我正在进行的课程,我必须创建一个程序,将二进制数据写入文件(基于用户输入),然后将其读取到控制台。这是通过两个独立的程序完成的,一个用于处理数据,另一个用于输入用户。每当我尝试列出文件的内容时,它会一遍又一遍地打印最后一项。我的代码有什么问题?
这是处理用户输入并打印到控制台的程序的相关部分:
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;
}
答案 0 :(得分:1)
您的use POSIX qw( strftime );
use Time::Local qw( timegm );
my $Y = ...;
my $m = ...;
my $d = ...;
my $epoch = timegm(0, 0, 0, $d, $m-1, $Y-1900);
my $dow_name = strftime("%A", gmtime($epoch));
对象永远不会被修改,因为DataInputStream
是函数DataInputStream in
的本地对象。
您需要在函数readSong()
中传递DataInputStream
对象读取的引用。
因此,调用应为readSong()
,并从您的函数song = process.readSong( fileName , read );
中删除本地DataInputStream in
答案 1 :(得分:0)
在readSong方法中放入while循环然后它只会逐行读取文件。 在第一种方法中不需要while循环,你只需要将filename传递给readsong方法。