package com.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* 文件分割
*/
public class FileSeparatorDemo1
{
/**
* 按字节分隔
* @param sourceFileUrl 源文件路径如:c:/a.txt
* @param targetFileUrl 目标文件路径文件夹
*/
public void separateFileByByte(String sourceFileUrl,String targetFileUrl)
{
File sourceFile = new File(sourceFileUrl);
//获得源文件名称
String sorceFileName= sourceFile.getName().split(".txt")[0];
try
{
//源文件文件流
FileInputStream fis = new FileInputStream(sourceFile);
int temp;
FileOutputStream fos = null; //目标文件文件流
int size = 0; //记录文件大小
int countFile = 1; //子文件数目
File targetFile = null;
do
{
if(size % 100 ==0)
{
//目标文件名称,以源文件名称加数据命名
String targetFileName = targetFileUrl + sorceFileName + countFile + ".txt";
targetFile = new File(targetFileName);
if(fos!=null)
{
fos.flush(); //刷新该流的缓冲
fos.close(); //关闭流
}
fos = new FileOutputStream(targetFile);
countFile++;
}
temp = fis.read(); //读文件
size++;
fos.write(temp); //写文件
}
while(fis.available()>0);//判断源文件是否还有流,即有没有读完
fis.close();
fos.flush();
fos.close();
System.out.println("文件分割完成!" );
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
/**
* 按字符分隔
* @param sourceFileUrl
* @param targetFileUrl
*/
public void separateFileByChar(String sourceFileUrl, String targetFileUrl)
{
File sourceFile = new File(sourceFileUrl);
String sourceFileName = sourceFile.getName().split(".txt")[0]; // 获得源文件名称
try
{
FileReader fr = new FileReader(sourceFile); // 源文件文件流
System.out.println("encoding:" + fr.getEncoding());
int temp;
FileWriter fw = null; // 目标文件文件流
int size = 0; // 记录文件大小
int countFile = 1; // 子文件数目
File targetFile = null;
do
{
if (size % 100 == 0)
{
String targetFileName = targetFileUrl + sourceFileName
+ countFile + ".txt"; // 目标文件名称,以源文件名称加数据命名
targetFile = new File(targetFileName);
if (fw != null)
{
fw.flush(); // 刷新该流的缓冲
fw.close();// 关闭流
}
fw = new FileWriter(targetFile);
countFile++;
}
temp = fr.read();// 读文件
size++;
fw.write(temp);// 写文件
}
while (temp != -1);// 判断源文件是否还有流,即有没有读完
fr.close();
fw.flush();
fw.close();
System.out.println("文件分割完成!");
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sourceFileUrl = null;
String targetFileUrl = null;
//输入源文件路径
System.out.println("源文件地址: \t");
try {
sourceFileUrl = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
//输入目标文件路径
System.out.println("\n目标文件地址: \t");
try {
targetFileUrl = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("源文件: " + sourceFileUrl + "\n目标文件: " + targetFileUrl);
FileSeparatorDemo1 fs = new FileSeparatorDemo1();
fs.separateFileByChar(sourceFileUrl, targetFileUrl);
}
}
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
/**
*
* 用缓冲流实现文件分隔
*/
public class FileSeparatorDemo2
{
public static void main(String args[])
{
try
{
BufferedReader br = new BufferedReader(new FileReader("c:/活动手机号码导入2.txt"));
BufferedWriter bw = null;
String s = null; //单行内容
int countLine = 0; //总行数
int countFile = 1; //子文件数
while((s=br.readLine())!=null)
{
if(countLine % 50 ==0)
{
if(bw!=null)
{
bw.flush();
bw.close();
}
bw = new BufferedWriter(new FileWriter("d:/活动手机号码导入2" + countFile + ".txt"));
countFile++;
}
bw.write(s);
bw.newLine();
System.out.println(s);
countLine++;
}
System.out.println("countLine:"+ countLine);
//bw.close();
if(countLine!=0)
{
bw.flush();
bw.close();
}
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
package com.test;
import java.io.FileReader;
import java.io.FileWriter;
/**
*
* 用字符流实现文件分隔
*/
public class FileSeparatorDemo3
{
public static final int charSize = 1024;
public static void main(String args[])
{
try
{
FileReader fr = new FileReader("c:/活动手机号码导入2.txt");
FileWriter fw = null;
char[] bfc = new char[charSize];
int temp; // 单个字符
int countWord = 0; // 字符数
int countFile = 1; // 子文件数
while ((temp = fr.read()) != -1)
{
if (countWord % charSize == 0)
{
fw = new FileWriter("c:/活动手机号码导入2" + countFile + ".txt");
countFile++;
}
bfc[countWord] = (char) temp;
if (countWord == charSize - 1)
{
fw.write(bfc);
fw.flush();
fw.close();
countWord = 0;
}
else
{
countWord++;
}
}
fr.close();
if (countWord > 0)
{
fw.write(bfc);
fw.flush();
fw.close();
}
}
catch (Exception e)
{
// TODO: handle exception
}
}
}