jol*_*ger 2 java bufferedreader
我正在尝试重用输入法Scanner(System.in)和BufferedReader(FileReader).当用户键入"readfile"作为命令时,程序会将文件中的第一个人(即文件中的第一行)添加到列表中,但是BufferedReader卡在同一行上,因此卡在无限循环中.键盘输入
的Scanner方法就像魅力一样.
class Menu {
public static final int ARRAYINDEXFOREMAIL = 3;
private static final String NEWPERSON = "newperson";
private static final String FROMFILE = "readfile";
public static final String READFILE = "saved.txt";
private Scanner keyboardInput = new Scanner( System.in );
private String name;
private String tlf;
private String[] email;
private String [] stringTmp;
private String in;
private boolean readFromFile = false;
Menu( boolean fileRead ) {
if( fileRead ) {
readFromFile = true;
}
else {
readFromFile = false;
}
}
void run() {
while(true) {
System.out.print("\n" + "ordre> ");
if ( !readFromFile ) {
in = keyboardInput.nextLine();
}
else {
try {
BufferedReader fileOut = new BufferedReader(
new FileReader( READFILE ) );
if( ( in = fileOut.readLine() ) == null ) {
readFromFile = false;
fileOut.close();
break;
}
else {
System.out.println("in stringTmp is: " + in); // For debugging purposes
}
}
catch (FileNotFoundException filenotfoundexception) {
System.out.println("Cannot find file: " + READFILE + " !");
}
catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
stringTmp = in.split("\\s+");
if( stringTmp[0].equalsIgnoreCase(NEWPERSON) ) {
if( stringTmp.length <= 1 ) {
System.out.println("ERROR! Enter one or more parameters..");
continue;
}
else {
name = stringTmp[1];
tlf = stringTmp[2];
if( stringTmp.length > ARRAYINDEXFOREMAIL ) {
email = new String[stringTmp.length - ARRAYINDEXFOREMAIL];
for( int i = ARRAYINDEXFOREMAIL, j = i - ARRAYINDEXFOREMAIL ; i < stringTmp.length; i++, j++ ) {
email[j] = stringTmp[i];
}
}
else {
email = new String[0];
}
mainlist.addPerson( name, tlf, email );
}
}
else if ( stringTmp[0].equalsIgnoreCase(FROMFILE) ) {
Meny m = new Menu( true );
m.run();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在循环中你设置
BufferedReader fileOut = new BufferedReader(new FileReader( READFILE ) );
Run Code Online (Sandbox Code Playgroud)
这将导致BufferedReader创建新的!
在循环的下一次迭代中 - 您将重复此行,fileOut作为结果重置- 当您调用时fileOut.readLine()- 它将再次读取第一行.
你应该fileOut在循环之前初始化而不是在它中解决它.
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |