如何合并两个文本文件中的数据

时间:2014-10-24 16:53:16

标签: java text merge

我在data1.txt和data2.txt中显示了两个相关的文本文件。我想合并这两个文件来创建result.txt。知道如何去做吗?

DATA1.TXT

books, 3
Shelf, 5
groceries,6
books, 1
Shelf, 2

data2.txt

books,2
shelf,3
groceries,1

的Result.txt

books, 3, 2
Shelf, 5,3
groceries,6,1
books, 1,2
Shelf, 2, 3

3 个答案:

答案 0 :(得分:1)

这是你的一个例子。首先你需要从data2文件文件中向2d list添加值。然后当file2中的line为null时,你可以得到相对于它的文本的映射值list .so我有一个方法可以返回String的映射值。代码比我想象的要长。我只发布相关的方法。This is link to complete class file

public void marged(){
    try {
        BufferedReader br1 = null;
        BufferedReader br2 = null;

        String line1;
        String line2;
        ArrayList<ArrayList<String>> arrayList = new ArrayList<>();

        br1 = new BufferedReader(new FileReader("C:\\Users\\Madhawa.se\\Desktop\\workingfox\\data1.txt"));
        br2 = new BufferedReader(new FileReader("C:\\Users\\Madhawa.se\\Desktop\\workingfox\\data2.txt"));

        while ((line1 = br1.readLine()) != null) {

            String[] split1 = line1.split(",");

            String line1word = split1[0].trim();
            String line1val = split1[1].trim();

            line2 = br2.readLine();

            if (line2 != null) {
                String[] split2 = line2.trim().split(",");

                String line2word = split2[0].trim();
                String line2val = split2[1].trim();

                ArrayList<String> list = new ArrayList();
                list.add(line2word);
                list.add(line2val);
                arrayList.add(list);

                if (line1word.equalsIgnoreCase(line2word)) {
                    String ok = line1word + "," + line1val + "," + line2val;
                    System.out.println(ok);
                }

            } else {
                String ok = line1word + "," + line1val + "," + doesexist(arrayList, line1word);
                System.out.println(ok);
            }

        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

这是方法返回映射值

public String doesexist(ArrayList<ArrayList<String>> arrayList, String s) {

    for (int i = 0; i < arrayList.size(); i++) {
        String get = arrayList.get(i).get(0);
        if (get.trim().equalsIgnoreCase(s.trim())) {
            return arrayList.get(i).get(1);
        }
    }
    return "-1";
 }

输出&GT;&GT;

books,3,2
Shelf,5,3
groceries,6,1
books,1,2
Shelf,2,3

答案 1 :(得分:0)

只需将文件添加到File对象的数组中,然后使用循环读取它。

File []files = new Files[amountOfFiles];
//initialize array elements
for(File f:files)
{
      //read each file and store it into string variable
}

//finally write the string variable into result.txt file.

答案 2 :(得分:0)

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileNotFoundException;

public class SOQ21
{

   public SOQ21()
   {

      merge();

   }

   public void merge()
   {

      try
      {
         String firstfile = "data1.txt";
         FileReader fr1 = new FileReader(firstfile);
         BufferedReader bfr1 = new BufferedReader(fr1);

         String secondfile = "data2.txt";
         FileReader fr2 = new FileReader(secondfile);
         BufferedReader bfr2 = new BufferedReader(fr2);

      /*
      ^^^ Right here is how you get the files and accompanying BufferedReaders 
      to handle them
      */

      //next, using the readLine() method from the Java API, read each line
      //for the first file

      //then, separate by taking the words into an ArrayList and storing the
      //numbers as Strings in a String[] of equal length of the ArrayList


      //Do the same for the second file

      //Then, if the word of ArrayList 1 matches the word of ArrayList 2, 
      //append the String numbers from String[] 2 to String[] 1

      //DONE! :)

      }

      catch(FileNotFoundException ex)
      {

      //handle how you want

      }


   }

   public static void main(String[] args)
   {

      SOQ21 soq = new SOQ21();

   }

}

我所做的评论应该回答你的大部分问题。最后,我会特别注意例外情况,我不完全确定你是如何处理的,但请确保填写 SOMETHING!