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
添加回答
舉報