您的位置:首页 > 运维架构 > Apache

分隔和合并txt文件

2014-05-17 20:29 218 查看
所需jar包:commons-io

下载地址:http://download.csdn.net/detail/u010122002/7362499

分隔txt文件:

这个是包含main方法的类,调用了ReadFile的readFile得到1-10000行,10001-20000行。。。。,调用WriterFile的writeFile方法将得到的1-10000行内容写入一个小文件,10001-20000行写入另一个小文件。。。。。意思就是这么个意思package sdu.out.file;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

public class Spilt {

static boolean flag = true;
public static void main(String[] args) {
final int start=1;//从第一行开始分隔
final int end =10000;//分隔得到的每个小txt文件的行数

String srcPath = "F:\\新建文件夹\\";//此文件夹路径下的所有txt文件为要分隔的文件
String desPath = "F:\\新建文件夹\\cj_lrcjb小文件\\";//分隔得到的许多小txt文件存放的路径
File file = new File(srcPath);
String[] filelist = file.list();
String[] str=new String[filelist.length];
for (int i = 0; i < filelist.length; i++) {
System.out.println(filelist[i]);
str[i] = filelist[i].split("\\.")[0];
}

for (int i=0; i<filelist.length; i++) {
String srcPath2 = srcPath+filelist[i];
for (int j = 0; flag; j++) {
String desPath2 = desPath+str[i]+"-"+(j+1)+".txt";
spilt(srcPath2, desPath2, j * end + start, (j + 1) * end);//传入起止行数
}
flag = true;
}

}

public static void spilt(String srcPath, String desPath, int startLine,
int endLine) {
List<String> lines = ReadFile.readFile(srcPath, startLine, endLine);//调用ReadFile的readFile
if (lines.isEmpty()) {
flag = false;
}
if (flag){
WriterFile.writeFile(lines, desPath);//将读到的内容写入小文件
}
}

}

package sdu.out.file;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ReadFile {
//根据起止行数读文件,并将每行当成一个String对象添加到list中返回
public static List<String> readFile(String fileName, int startLine,
int endLine) {
List<String> lines = new ArrayList<String>();
String output = "";
File file = new File(fileName);
if (file.exists()) {
if (file.isFile()) {
try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader input = new BufferedReader(isr);
String text;
for (int i = 0; i < startLine - 1; i++) {
input.readLine();
}
for (int i = startLine; ((text = input.readLine()) != null)
&& i <= endLine; i++) {
lines.add(text);
}

} catch (IOException ioException) {
System.err.println("File Error!");

}
} else if (file.isDirectory()) {
String[] dir = file.list();
output += "Directory contents:/n";

for (int i = 0; i < dir.length; i++) {
output += dir[i] + "/n";
}
}
} else {
System.err.println("Does not exist!");
}
return lines;
}
//根据文件名读取文件的所有行
public static List<String> readFileAll(String fileName) {
List<String> lines = new ArrayList<String>();
String output = "";
File file = new File(fileName);
if (file.exists()) {
if (file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(
file));
String text;
while ((text = input.readLine()) != null) {
lines.add(text);
}
} catch (IOException ioException) {
System.err.println("File Error!");
}
} else if (file.isDirectory()) {
String[] dir = file.list();
output += "Directory contents:/n";

for (int i = 0; i < dir.length; i++) {
output += dir[i] + "/n";
}
}
} else {
System.err.println("Does not exist!");
}
return lines;
}
}

package sdu.out.file;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;

public class WriterFile {

public static void writeFile(List<String> lines, String fileName) {
try {
FileUtils.writeLines(new File(fileName), lines);
} catch (IOException e) {
e.printStackTrace();
}
}

public static void mergeFile(List<String> lines, String fileName) {
try {
FileWriter writer = new FileWriter(fileName, true);
for (String string : lines) {
writer.write(string+"\r\n");
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

}


合并txt文件:

合并txt文件也差不多,先调用ReadFile的readFileAll方法,再调用WriterFile的mergeFile方法(这时候不能调用writeFile方法,它会把原来的文件内容覆盖),而mergeFile方法中的FileWriter writer = new FileWriter(fileName, true);这一行里的true会在原来文件内容后append。writeFile方法使用Apache commons-io里的FileUtils类,而FileWriter writer = new
FileWriter(fileName, true);为java类库里的。

package sdu.out.file;

import java.io.File;
import java.util.List;

public class Merge {
static boolean flag = true;
public static void main(String[] args) {
String srcPath = "D:\\test-b\\p-z\\";
String desPath = "D:\\test-b\\1.txt";
File file = new File(srcPath);
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
String srcPath2 = srcPath + filelist[i];
// String desPath2 = desPath+str[i]+"-"+(j+1)+".txt";
if (flag) {
merge(srcPath2, desPath);
}
flag = true;
}
}

public static void merge(String srcPath, String desPath) {
List<String> lines = ReadFile.readFileAll(srcPath);
if (lines.isEmpty()) {
flag = false;
}
if (flag) {
WriterFile.mergeFile(lines, desPath);
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐