package me;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Chapter {
public void cut(String srcFilePath,String dstDir){
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader(srcFilePath));
String tempString=null;
StringBuffer sb=new StringBuffer();
Pattern p=Pattern.compile("第.*章");
Matcher m=null;
int index=0;
int i=0;
File file;
while((tempString=br.readLine())!=null){
tempString+="\r\n";
sb.append(tempString);
}
m=p.matcher(sb);
while(m.find()){
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString(), index, m.start());
index=m.start();
i++;
}
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString(), index, (int) file.length());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException ie){
ie.printStackTrace();
}
finally{
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[]args){
Chapter c=new Chapter();
c.cut("D:/dfd/[网游]网游之恶魔猎人.txt", "D:/test");
}
}这是我的源程序,不知道是什么原因,不能实现预期目标,按照“第.*章”分割文件
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Chapter {
public void cut(String srcFilePath,String dstDir){
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader(srcFilePath));
String tempString=null;
StringBuffer sb=new StringBuffer();
Pattern p=Pattern.compile("第.*章");
Matcher m=null;
int index=0;
int i=0;
File file;
while((tempString=br.readLine())!=null){
tempString+="\r\n";
sb.append(tempString);
}
m=p.matcher(sb);
while(m.find()){
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString(), index, m.start());
index=m.start();
i++;
}
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString(), index, (int) file.length());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException ie){
ie.printStackTrace();
}
finally{
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[]args){
Chapter c=new Chapter();
c.cut("D:/dfd/[网游]网游之恶魔猎人.txt", "D:/test");
}
}这是我的源程序,不知道是什么原因,不能实现预期目标,按照“第.*章”分割文件
解决方案 »
- myeclipse 有swing画图插件吗
- 请问如何把byte类型的数据在Ascii表中对应的字符打印出来?反过来,如何打印一个char字符对应的byte类型?
- Class.forName的作用?为什么要用?Jdo是什么?有什么用?
- 学java一步一个跟头,在package这里又摔倒了,求助
- 关于接口继承Runnable后启动线程的问题
- 求java 项目!!!
- 我开发的MasterMoney重新写了一遍,升级到v1.4.0,欢迎测试
- 请教各位网友有什么方法可以根据事件类型的id来获得这个事件类型名?
- 怎样引用包?
- 各位,我想转向做通信方面的开发,但是又不敢面对挑战?
- 字符串排序问题?
- 求教~!java编译出现调用未经检查错误。
方法一:
JAVA按行数分割文件
import java.io.*;
public class SegFile{
/**
*根据需求,直接调用静态方法start来执行操作
*参数:
* rows 为多少行一个文件 int 类型
* sourceFilePath 为源文件路径 String 类型
* targetDirectoryPath 为文件分割后存放的目标目录 String 类型
* ---分割后的文件名为索引号(从0开始)加'_'加源文件名,例如源文件名为test.txt,则分割后文件名为0_test.txt,以此类推
*/
public static void start(int rows,String sourceFilePath,String targetDirectoryPath){
File sourceFile = new File(sourceFilePath);
File targetFile = new File(targetDirectoryPath);
if(!sourceFile.exists()||rows<=0||sourceFile.isDirectory()){
System.out.println("源文件不存在或者输入了错误的行数");
return;
}
if(targetFile.exists()){
if(!targetFile.isDirectory()){
System.out.println("目标文件夹错误,不是一个文件夹");
return;
}
}else{
targetFile.mkdirs();
}
try{
BufferedReader br = new BufferedReader(new FileReader(sourceFile));
BufferedWriter bw = null;
String str = "";
String tempData = br.readLine();
int i=1,s=0;
while(tempData!=null){
str += tempData+"\r\n";
if(i%rows==0){
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())));
bw.write(str);
bw.close();
str = "";
s += 1;
}
i++;
tempData = br.readLine();
}
if((i-1)%rows!=0){
bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName())));
bw.write(str);
bw.close();
br.close();
s += 1;
}
System.out.println("文件分割结束,共分割成了"+s+"个文件");
}catch(Exception e){}
}
//测试
public static void main(String args[]){
SegFile.start(11,"d:/test/test.txt","d:/test/test/");
}
}
/*
把代码改了下,先前的代码在行数刚好分完的情况下会多分一个空白文件,现在不存在这个问题了
*/
*
* 文件分割
*/
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);
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Chapter {
public void cut(String srcFilePath,String dstDir){
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader(srcFilePath));
String tempString=null;
StringBuffer sb=new StringBuffer();
Pattern p=Pattern.compile("第.*?章");
Matcher m=null;
int index=0;
int i=0;
File file;
while((tempString=br.readLine())!=null){
tempString+="\r\n";
sb.append(tempString);
}
m=p.matcher(sb);
while(m.find()){
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
int start = m.start();
if(m.find()){
index=m.start();
bw.write(sb.toString(),start, index-start);
bw.flush();
m.region(index,sb.length());
}else{
bw.write(sb.toString(),start, sb.length()-start);
}
i++;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch(IOException ie){
ie.printStackTrace();
}
finally{
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[]args){
Chapter c=new Chapter();
c.cut("c:/1.txt", "D:/test");
}
}
1.比如,bw写完文件之后,应该这样写,bw.flush(),bw.close();确保文件写入,因为我之前没有没有写这两句,导致文件没有写入成功,文件大小为0
2. while(m.find()){
file=new File("D:/test/"+i+".txt");
bw=new BufferedWriter(new FileWriter(file));
bw.write(sb.toString(), index, m.start());
index=m.start();
i++;
}
应该改为了:bw.write(sb.toString(),index,(m.start()-index));3.就像7楼说的应该改为:
循环外的bw.write那句改成bw.write(sb.toString(), index, sb.length() - index);谢谢大家的帮助
bw.write()的第三个参数应该是写入字符串的长度,所以说我这里写错了3.
循环外的bw.write那句改成bw.write(sb.toString(), index, sb.length() - index);