日期:2014-05-20  浏览次数:20870 次

分割大文本文件的程序,不能正常输出,请各位大神指教
最近要做一个文本分割,要求把一个txt文件分割成十个txt文件,我想按照每个文本文件50行来分,下面是我写的四段代码,由于小弟java不太成熟,大神不要见笑,现在问题是生成的每个新文件里面只有一行文本(应该有50行才对的)

public class inputFile {
/**
* @param the start of pre_process
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
fileCut in=new fileCut("E:/reviewsNew.txt");//创建一个fileCut对象 in
in.inputfile();
}
}


public class fileCut implements RandomAccess{
private String filetrack;
private String copyline;
private int count=1;

public fileCut(String string) {
// TODO 传入文件路径
this.filetrack=string;
}

void inputfile() throws IOException{
// TODO 创建RandomAccessFile类型对象, 并读取文件
File track=new File(filetrack);
RandomAccessFile sourcefile=new RandomAccessFile(track, "r");
System.out.println("I have read it");

setName newname=new setName();
int t=newname.setName();//得到一个int型的变量,用于命名新文件

for(int i=0;i<10;i++){ //十次循环,每次新建一个文件
count=1;
writeLine write=new writeLine();// 声明一个writeLine对象write
int countfile = t++;
write.writeNewfile(countfile);
while(count<=50){ // 循环将58行写入一个文件
copyline = sourcefile.readLine();
write.writeLine(copyline);
count++;
} }
}
}


public class writeLine {
public String newinline;
public int a;
public writeLine(){
}

public DataOutputStream writefile(int a) throws FileNotFoundException{
DataOutputStream d = new DataOutputStream(new FileOutputStream("E:/files/"+a+".txt"));
return d;
}

public void writeNewfile(int t) throws FileNotFoundException {
a=t;
writefile(a);
  }

public void writeLine(String s) throws IOException{
this.newinline=s;
writefile(a).writeBytes(newinline);
System.out.println("now I am writing into the file :"+a);
}

}
接下来这个函数写的有点累赘
public class setName {
int txtnum=0;
 
  int setName(){
return txtnum;
  }
}

我自己感觉是红色字体部分的循环有问题,可是就是找不到解决方法。。。

------解决方案--------------------
个人认为:
public class writeLine {
public String newinline;
public int a;
private DataOutputStream d;
public writeLine(){
}

public void writefile(int a) throws FileNotFoundException{
this.d = new DataOutputStream(new FileOutputStream("E:/files/"+a+".txt"));
}

public void writeNewfile(int t) throws FileNotFoundException {
a=t;
writefile(a);
}

public void writeLine(String s) throws IOException{
this.d.writeByte((s + "\r\n").getBytes());
}

}

应该可以。最好能加上close()方法。作用就是关闭DataOutputStream.在使用每个文件使用完毕使用。
------解决方案--------------------
补充一下,要分行的话在
Java code
d.writeBytes(copyline);//后面加一句 d.writeChars("\n");

------解决方案--------------------
这是以前学习时候自己写的文件切割和文件合并的例子,希望对你有用:
package com.xinzhanedu1;

import java.io.*;

public class Testdevide {
public static void main(String[] args) {
File file = new File("E:/初恋这件小事.rmvb");
File file1 = new File("E:/1.rmvb");
File file2 = new File("E:/2.rmvb");

int i ,j = 0;
try {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);

FileOutputStream fos1 = new FileOutputStream(file1);
BufferedOutputStream bos1 = new BufferedOutputStream(fos1);