Java结合了两个文本文件

时间:2016-10-10 17:36:16

标签: java

我有一个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”可能会解决问题,但我不确定如何编写对应我的硬盘。谢谢你看一看,我感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

这里有几件事可以改进。

首先,正如其他人所指出的那样,你需要指定文件的正确路径,你这样做的方式假定文件在类路径中,显然它们不是。

您可以指定绝对路径,也可以指定与班级相比的相对路径。

如果你想保持原样,你需要把文件放在classpath(你的班级运行的地方)。

有关absoluterelative path

的其他信息,请参阅此处

http://www.xyzws.com/javafaq/what-is-the-difference-between-absolute-relative-and-canonical-path-of-file-or-directory/60

除此之外,你不应该从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)

卢卡斯,你的节目是绝对正确的。你不需要纠正任何事情只需手动创建文件“A.txt”,然后再次运行此代码。

答案 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)

并且第一行是您必须放置文件的位置:)