问题描述
- 利用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
…………
大神求解
解决方案
第一种合并方式比较简单,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();
}
}
}
解决方案二:
读取两个文件,分别装入两个arraylist,然后循环根据需要得到你要的。
分别是两重循环。
解决方案三:
在二楼基础上补充一楼:
/*****
* @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();
}
解决方案四:
补充:忘记删除了这两句代码
StringBuffer buffer = new StringBuffer();
buffer.append(" ");
解决方案五:
java文件IO操作
java io操作文件
java IO 文件操作