寂寞不孤单
2016-01-06 14:40
采纳率: 16.7%
浏览 1.6k
已采纳

利用java io操作多个文件

A文件:
A
B
C
D
B文件:
1
2
3
4
利用java io操作A B 文件,得出
C文件:
A 1234
B 1234
C 1234
D 1234

或者
A 1
A 2
A 3
A 4
B 1
B 1
B 2
B 3
B 4
…………
大神求解

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 毕小宝 2016-01-06 23:38
    已采纳

    第一种合并方式比较简单,A文件的逐行+B文件的全部内容,所以可以这样实现:先将B文件读入内存中存入中间变量中,然后逐行遍历A文件写入C文件。
    参考实现如下,合并时注意添加必要的空格:

     import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FileMerge {
        /**
         * 将源文件和目标文件的内容逐行合并后输出到第三个文件中
         * 合并方式是source 中的每一行+target中所有行
         * 实现方式,先将target全部读入内存,然后逐行遍历source拼接目标内容后写入dist,
         * @param source
         * @param targte
         * @param target
         * @throws IOException 
         */
        public static void merge(String source,String target,String dist) throws IOException{
             //先读取target的内容存入临时变量
             File file = new File(target);
             BufferedReader reader = new BufferedReader(new FileReader(file));
             StringBuffer buffer = new StringBuffer();
             buffer.append(" ");
             String value = reader.readLine();
             while(value!=null){
                 buffer.append(value).append(" ");
                 value = reader.readLine();
             }
             reader.close();
             String targetContent = buffer.toString();
    
             //逐行读取source,组合目标文件source一行+target整个文件内容
             BufferedWriter bw = new BufferedWriter(new FileWriter(dist));
             file = new File(source);
             reader = new BufferedReader(new FileReader(file));
             value = reader.readLine();
             while(value!=null){
                 bw.write(value+targetContent);
                 bw.newLine();
                 value = reader.readLine();
             }
             bw.flush();
             bw.close();
        }
    
        public static void main(String[] args) {
            String a = "src/A.txt";
            String b = "src/B.txt";
            String c = "src/C.txt";
            try {
                merge(a,b,c);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    点赞 打赏 评论
  • blownewbee 2016-01-06 14:42

    读取两个文件,分别装入两个arraylist,然后循环根据需要得到你要的。
    分别是两重循环。

    点赞 打赏 评论
  • QZC78 2016-01-07 01:16

    在二楼基础上补充一楼:
    /*****
    * @author :QZC
    * @createDate :2016年1月7日 上午9:15:01
    * 函数功能描述:读取两个文件分别装入list,合并输入
    * @param source
    * @param target
    * @param dist
    * @throws IOException
    *****/
    public static void mergeLine(String source,String target,String dist) throws IOException{
    File file = new File(target);
    BufferedReader reader = new BufferedReader(new FileReader(file));

    StringBuffer buffer = new StringBuffer();
    buffer.append(" ");
    String value = reader.readLine(); //读取行内容
    List blist=new ArrayList(); //b集合
    while(value!=null){
    blist.add(value);
    value = reader.readLine();
    }
    reader.close();

        List<String> alist=new ArrayList<String>();  //a集合
        file = new File(source);
        reader = new BufferedReader(new FileReader(file));
        String aValue=reader.readLine();
        while(aValue!=null){
            alist.add(aValue);
            aValue=reader.readLine();
        }
        reader.close();
    
        //逐行写入C文件,组合a文件一行+b文件一行
        BufferedWriter bw = new BufferedWriter(new FileWriter(dist));  
        for(String a:alist){
           for(String b:blist){
                bw.write(a+" "+b);
                bw.newLine(); 
            }
            bw.newLine(); //(可有可无,不过为了格式好看还是加上)
        }
        bw.flush();
        bw.close();
    }
    
    点赞 打赏 评论
  • QZC78 2016-01-07 01:21

    补充:忘记删除了这两句代码
    StringBuffer buffer = new StringBuffer();
    buffer.append(" ");

    点赞 打赏 评论

相关推荐 更多相似问题