我从不同的路径读取了两个文件,而在while循环中无法读取第二个文件的内容时,这迫使我初始化以下程序中rt的变量。请帮助我如何修复它以获得 预期的输出。预先谢谢.. !!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class ReadingFiles
{
public static void main(String[] args) throws IOException
{
String inp = "location\\first.txt";
String two = "location\\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"));
while((st=br.readLine())!= null || (rt=br2.readLine())!= null )
{
bw.write(st);
bw.newLine();
/*bw.write(rt);
bw.newLine();
System.out.println(rt);*/
//instance variable rt of type String is forcing me to initialize like
//for local variable and throwing nullpointer exception instead of fetching
//second file contents
}
bw.close();
}
}
请在上面找到我的程序,我正在尝试写入两个文本文件内容 进入第三档。以及下面给出的示例输入和输出
input
in file-1 a1a1a1
b2b2b2
c3c3c3
in file-2 d1d1d1
e2e2e2
f3f3f3
output
a1a1a1
d1d1d1
b2b2b2
e2e2e2
c3c3c3
f3f3f3
答案 0 :(得分:0)
我将使用无限do
while
循环而不是while
来执行此操作,并在循环内部的单独if
中管理循环退出条件。
为什么?因为while
标头中的第二个条件语句可能是或(||
,因此可能不会执行,并且当第一个语句为true
时,编译器会忽略条件语句的其余部分,并且因此rt
永远不会启动。这就是编译器强迫您初始化rt
的原因。
答案 1 :(得分:0)
您并没有关闭读者,与显式关闭相比,我更喜欢try-with-resources
。然后,无限循环地从各自文件中读取每一行。在写入输出缓冲区之前,分别测试每个文件中的null
,然后在耗尽两个输入之后再次结束测试以终止循环。像
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();
}
答案 2 :(得分:0)
您在代码中犯了一些错误,并且还有更好的方法来实现代码。 但是为了您的轻描淡写,我将更新您现有的代码。
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();
}
}