结合两个文本文件的Java

结合两个文本文件的Java,java,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

我有一个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.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
公共类组合文件{
公共静态void main(字符串[]args)引发IOException
{
ArrayList=新建ArrayList();
尝试
{
BufferedReader br=新的BufferedReader(新文件读取器(“A.txt”);
BufferedReader r=新的BufferedReader(新文件读取器(“B.txt”);
字符串s1=null;
字符串s2=null;
而((s1=br.readLine())!=null)
{
列表。添加(s1);
}
而((s2=r.readLine())!=null)
{
列表。添加(s2);
}
}
捕获(IOE异常)
{
e、 printStackTrace();
}
BufferedWriter=null;
writer=newbufferedwriter(newfilewriter(“B.txt”);
字符串列表字;
对于(int i=0;i
现在,当我编译它时,我收到了这个消息

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
java.io.FileNotFoundException:A.txt(没有这样的文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:120)
位于java.io.FileInputStream。(FileInputStream.java:79)
位于java.io.FileReader。(FileReader.java:41)
位于CombineTwoFile.main(CombineTwoFile.java:15)
完整的

我在苹果电脑上使用Coderunner,我想也许将文本文件写为“C:/Users/dell/Desktop/Test/input1.txt”可以解决这个问题,但我不确定如何将其写入硬盘。谢谢你看,我感谢你的帮助

您的Java程序在所需位置找不到“A.txt”,若要知道将文件放在何处,您可以使用
system.getproperty(user.dir)
了解系统在何处查找文件。另一种方法是,您可以在
新文件('c:\\something\\A.txt')中写入绝对路径


希望对你有帮助,卢卡斯,你的程序绝对正确。您不需要更正任何内容,只需手动创建一个文件“a.txt”,然后再次运行此代码。

这里有几个地方可以改进

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

可以指定绝对路径,也可以指定与类比较的相对路径

如果你想保持原样,你需要把文件放在
类路径中(你的类运行的地方)

有关
绝对路径
相对路径
的更多信息,请参见此:

除此之外,您不应该从
main
抛出异常,而是应该处理它

我还建议您使用新的
尝试使用资源

示例:

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

就写作而言,同样的建议也适用

您还可以通过使用一个字符串来避免写入第+“\n”行。 它将提供一个println(strings)方法,即自动刷新,出于可移植性的原因,它会更好

作为一个小提示,在这种情况下,您实际上不需要
s2
,再次使用
s1
就可以了

System.out.println(新文件(“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)
C:\Users\piyushittal\Downloads\Java mongodb hello world example\mongodb\A.txt
java.io.FileNotFoundException:A.txt(系统找不到指定的文件)
在java.io.FileInputStream.open0(本机方法)中完成
在java.io.FileInputStream.open(FileInputStream.java:195)
位于java.io.FileInputStream。(FileInputStream.java:138)
位于java.io.FileInputStream。(FileInputStream.java:93)
位于java.io.FileReader。(FileReader.java:58)
位于com.mkyong.core.CombineTowile.main(CombineTowile.java:19)

第一行是您必须放置文件的地方:)

您需要文件的完整路径
newfilereader(“A.txt”)
将尝试从类路径读取文件。文件
A.txt
不存在或位置错误。您可以通过记录以下值来找到文件的放置位置:
newfile(“A.txt”).getCanonicalPath()
。只需将A.txt文件添加到目录中,并在新的FileReader(“A.txt”)中,而不是只传递“A.txt”,将完整路径作为参数传递给A.txt文件。例如,如果您将文件A.txt放在C驱动器的临时文件夹中。现在在课堂上你将以参数C:\\temp\\A.txt.Im的形式通过,我的教授说不要包含到绝对路径,因为她将把所有文件放在一个文件夹中并测试它。还有其他可能的解决办法吗?或者,是否有一个简单的解决方案“将txt文件放置在所需的位置?”不太清楚它的位置。我还尝试在编码应用程序use System.out.println(System.getproperty(user.dir))中打开txt文件;要查看工作目录,请将文本文件放在与java文件相同的位置,文件地址类似于“system.get”