3 回答

TA贡献1784条经验 获得超8个赞
您在代码中犯了几个错误,并且还有更好的方法来实现代码。但是对于您的轻描淡写,我将更新您现有的代码。
1) st 和 rt 应初始化。因为当第一次 st 初始化时,rt 尚未初始化。
2) ||应该是 &&.因为您需要循环直到所有文件都读完为止。
3)应该检查st&rt是否为空。
请检查以下代码。
public class ReadingFiles
{
public static void main(String[] args) throws IOException
{
String inp = "first.txt";
String two = "second.txt";
BufferedReader br = new BufferedReader(new FileReader(inp));
BufferedReader br2 = new BufferedReader(new FileReader(two));
String st,rt="";
BufferedWriter bw = new BufferedWriter(new FileWriter("location"));
boolean isCompleted = false;
while( !isCompleted)
{
st=br.readLine() ;
bw.write(st==null?"":st);
bw.newLine();
rt=br2.readLine();
bw.write(rt==null?"":rt);
bw.newLine();
isCompleted = (st==null && rt == null) ? true : false ;
}
bw.close();
}
}

TA贡献1804条经验 获得超8个赞
你没有关闭你的读者,我更喜欢过度明确的关闭。然后,在无限循环中读取各自文件中的每一行。在写入输出缓冲区之前,从每个文件单独测试 ,并在用尽两个输入后再次终止循环。像这样,try-with-resourcesnull
try (BufferedReader br = new BufferedReader(new FileReader(inp));
BufferedReader br2 = new BufferedReader(new FileReader(two));
BufferedWriter bw = new BufferedWriter(new FileWriter("location"))) {
while (true) {
String st = br.readLine();
if (st != null) {
bw.write(st);
bw.newLine();
}
String rt = br2.readLine();
if (rt != null) {
bw.write(rt);
bw.newLine();
}
if (st == null && rt == null) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}

TA贡献1851条经验 获得超5个赞
我会使用无限循环而不是在我的循环内单独管理循环退出条件。do
while
while
if
为什么?因为标头中的第二个条件语句可能不会执行,因为它是 or (),并且当第一个语句是时,编译器会忽略条件语句的其余部分,因此永远不会启动。这就是为什么编译器强制您初始化的原因。while
||
true
rt
rt
添加回答
举报