e.g.
目录c:\test
文件名:test_20111030_123510.txt
文件内容:
id name
10 aa
11 bb
12 cc
文件名: test_20111030_081020.txt
文件内容
id name
05 ee
06 ff
08 hh
最后看时间戳第二个文件名时间前于第一个文件名,所以要变成
id name
05 ee
06 ff
08 hh
10 aa
11 bb
12 cc
请教方法和代码!多谢!
8 个解决方案
#1
话不多说 直接上代码自己研究
For Example
For Example
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class TestReadAndWrite {
public static File[] getFileSort(File[] f) {// 对文件数组按照修改日期进行冒泡排序
File changef = null;
for (int i = 0; i < f.length - 1; i++) {
if (f[i].lastModified() > f[i + 1].lastModified()) {
changef = f[i + 1];
f[i + 1] = f[i];
f[i] = changef;
i = 0;
}
}
return f;
}
public static void main(String[] args) {
File fdir = new File("E:\\test");
File write = new File("E:\\test.txt");
boolean first = true;// 第一个文件的标识符
try {
FileWriter fw = new FileWriter(write, true);//追加模式写文件
if (fdir.isDirectory()) {
File[] ftxt = fdir.listFiles();
ftxt = getFileSort(ftxt);
for (File f : ftxt) {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String str = br.readLine();
if (!first) {//如果不是第一个文件就跳开第一行:id name
str = br.readLine();
}
first = false;
while (str != null) {
fw.write(str + "\n");
fw.flush();
str = br.readLine();
}
br.close();
fr.close();
}
fw.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
#2
提供一种思路:
把两个文件中的数据都读入内存,存放到Map中,id作为键值,Map是按键值有序的
然后将内容输出到指定的文件
把两个文件中的数据都读入内存,存放到Map中,id作为键值,Map是按键值有序的
然后将内容输出到指定的文件
#3
谢谢,不过id不是key,两个文件中都有可能有重复数据的。
#4
你理解错了,public static File[] getFileSort(File[] f) {// 对文件数组按照修改日期进行冒泡排序
这个画蛇添足了,楼主的文件名已经有时间戳了,是要按照文件名上的时间来顺序读写的,这样的话,list方法就是按照文件名排序的。
这个画蛇添足了,楼主的文件名已经有时间戳了,是要按照文件名上的时间来顺序读写的,这样的话,list方法就是按照文件名排序的。
#5
生成的文件里面要不要剔除重复的数据?
#6
需要的,要怎样做呢?这步我本来打算在后续的处理中做,如果可以在java里做更好了。
#7
我的想法是:
首先按照文件名中的时间戳把文件排好序,然后按顺序读取。写一个javabean来代表文件中一行(这里这
个javabean的字段为id和name),重写它的equals方法。新建一个HashMap和LinkedList,用id做为map的
键,每读一行生成一个javabean,先用map.hasKey(id)看下是否已经有改记录,若没有则把该bean放入
list中,若有则读取下一行。最后list中保存的就是你所要的数据了。
首先按照文件名中的时间戳把文件排好序,然后按顺序读取。写一个javabean来代表文件中一行(这里这
个javabean的字段为id和name),重写它的equals方法。新建一个HashMap和LinkedList,用id做为map的
键,每读一行生成一个javabean,先用map.hasKey(id)看下是否已经有改记录,若没有则把该bean放入
list中,若有则读取下一行。最后list中保存的就是你所要的数据了。
#8
非常感谢大家,准备结贴了。
#1
话不多说 直接上代码自己研究
For Example
For Example
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class TestReadAndWrite {
public static File[] getFileSort(File[] f) {// 对文件数组按照修改日期进行冒泡排序
File changef = null;
for (int i = 0; i < f.length - 1; i++) {
if (f[i].lastModified() > f[i + 1].lastModified()) {
changef = f[i + 1];
f[i + 1] = f[i];
f[i] = changef;
i = 0;
}
}
return f;
}
public static void main(String[] args) {
File fdir = new File("E:\\test");
File write = new File("E:\\test.txt");
boolean first = true;// 第一个文件的标识符
try {
FileWriter fw = new FileWriter(write, true);//追加模式写文件
if (fdir.isDirectory()) {
File[] ftxt = fdir.listFiles();
ftxt = getFileSort(ftxt);
for (File f : ftxt) {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String str = br.readLine();
if (!first) {//如果不是第一个文件就跳开第一行:id name
str = br.readLine();
}
first = false;
while (str != null) {
fw.write(str + "\n");
fw.flush();
str = br.readLine();
}
br.close();
fr.close();
}
fw.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
#2
提供一种思路:
把两个文件中的数据都读入内存,存放到Map中,id作为键值,Map是按键值有序的
然后将内容输出到指定的文件
把两个文件中的数据都读入内存,存放到Map中,id作为键值,Map是按键值有序的
然后将内容输出到指定的文件
#3
谢谢,不过id不是key,两个文件中都有可能有重复数据的。
#4
你理解错了,public static File[] getFileSort(File[] f) {// 对文件数组按照修改日期进行冒泡排序
这个画蛇添足了,楼主的文件名已经有时间戳了,是要按照文件名上的时间来顺序读写的,这样的话,list方法就是按照文件名排序的。
这个画蛇添足了,楼主的文件名已经有时间戳了,是要按照文件名上的时间来顺序读写的,这样的话,list方法就是按照文件名排序的。
#5
生成的文件里面要不要剔除重复的数据?
#6
需要的,要怎样做呢?这步我本来打算在后续的处理中做,如果可以在java里做更好了。
#7
我的想法是:
首先按照文件名中的时间戳把文件排好序,然后按顺序读取。写一个javabean来代表文件中一行(这里这
个javabean的字段为id和name),重写它的equals方法。新建一个HashMap和LinkedList,用id做为map的
键,每读一行生成一个javabean,先用map.hasKey(id)看下是否已经有改记录,若没有则把该bean放入
list中,若有则读取下一行。最后list中保存的就是你所要的数据了。
首先按照文件名中的时间戳把文件排好序,然后按顺序读取。写一个javabean来代表文件中一行(这里这
个javabean的字段为id和name),重写它的equals方法。新建一个HashMap和LinkedList,用id做为map的
键,每读一行生成一个javabean,先用map.hasKey(id)看下是否已经有改记录,若没有则把该bean放入
list中,若有则读取下一行。最后list中保存的就是你所要的数据了。
#8
非常感谢大家,准备结贴了。