我有一个Java类的作业,它要求我合并两个文本文件。
这是我到目前为止的代码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class CombineTwoFile {
public static void main(String[] args) throws IOException
{
ArrayList<String> list = new ArrayList<String>();
try
{
BufferedReader br = new BufferedReader(new FileReader( "A.txt"));
BufferedReader r = new BufferedReader(new FileReader( "B.txt"));
String s1 =null;
String s2 = null;
while ((s1 = br.readLine()) != null)
{
list.add(s1);
}
while((s2 = r.readLine()) != null)
{
list.add(s2);
}
}
catch (IOException e)
{
e.printStackTrace();
}
BufferedWriter writer=null;
writer = new BufferedWriter(new FileWriter("B.txt"));
String listWord;
for (int i = 0; i< list.size(); i++)
{
listWord = list.get(i);
writer.write(listWord);
writer.write("\n");
}
System.out.println("completed");
writer.close();
}
}
现在,当我编译它时,我会收到此消息。
java.io.FileNotFoundException: A.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at java.io.FileReader.<init>(FileReader.java:41)
at CombineTwoFile.main(CombineTwoFile.java:15)
completed
我在Apple计算机上使用Coderunner,我认为将文本文件写成“C:/Users/dell/Desktop/Test/input1.txt”可能会解决问题,但我不确定如何编写对应我的硬盘。谢谢你看一看,我感谢任何帮助。
答案 0 :(得分:2)
这里有几件事可以改进。
首先,正如其他人所指出的那样,你需要指定文件的正确路径,你这样做的方式假定文件在类路径中,显然它们不是。
您可以指定绝对路径,也可以指定与班级相比的相对路径。
如果你想保持原样,你需要把文件放在classpath
(你的班级运行的地方)。
有关absolute
和relative path
除此之外,你不应该从main
抛出异常,而应该处理它。
我还建议您使用新的try-with-resources
。
示例:强>
try(BufferedReader bf = new BufferedReader(new FileReader( "C:\\Users\\...\\A.txt"));){
//do something
} catch(IOException e){
//handle
}
//no need to close the streams, the jgc will handle that for you
当你在try块中使用它们时,这将关闭你的流。
如果您的老师(正如您在一条评论中添加的那样)希望您能够动态选择路径,则需要从控制台输入该路径并将其用作绝对路径。
Scanner s = new Scanner(System.in);
String path = s.readLine(); //use this as absolute path
如果您需要GUI
,则需要JFileChooser
。
就写作而言,同样的建议也适用。
您还可以使用PrintWriter来避免写入行+'\ n'。 它将提供println(String s)方法,自动刷新,并且出于可移植性的原因,它更好。
作为次要注释,在这种情况下,您实际上并不需要s2
,再次使用s1
就可以了。
答案 1 :(得分:0)
您的Java程序在所需位置找不到'A.txt',要知道放置文件的位置,您可以使用system.getproperty( user.dir )
来了解系统查找文件的位置。另一种方法是你可以在new File('c:\\something\\A.txt');
希望有所帮助
答案 2 :(得分:0)
答案 3 :(得分:0)
只是放置
System.out.println(new File("A.txt").getCanonicalPath());
之前
BufferedReader br = new BufferedReader(new FileReader( "A.txt"));
BufferedReader r = new BufferedReader(new FileReader( "B.txt"));
您将获得异常信息之前的确切路径,如:
C:\Users\PiyushMittal\Downloads\Java-mongodb-hello-world-example\mongodb\A.txt
java.io.FileNotFoundException: A.txt (The system cannot find the file specified)
completed at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at com.mkyong.core.CombineTwoFile.main(CombineTwoFile.java:19)
并且第一行是您必须放置文件的位置:)