分隔和合并txt文件

所需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);
		}
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值