public void go() throws Exception { srcfile = new File(srcdir); if ((!srcfile.exists()) || (!srcfile.isDirectory())) { throw new Exception("\"" + srcdir + "\" dir does not exist!"); }
File descfile = new File(descdir); if ((!descfile.exists()) || (!srcfile.isDirectory())) { descfile.mkdir(); } fos = new FileOutputStream(descdir + "/" + descfilenum + ".txt"); nest(srcdir); fos.close(); }
public void nest(String dir) throws Exception { srcfile = new File(dir); String[] files = srcfile.list();
boolean havesubdir = false; //处理文件 for (int i=0; i<files.length; i++) { srcfile = new File(dir + "/" + files[i]); if (srcfile.isDirectory()) { havesubdir = true; continue; } else { if(srcfile.getName().lastIndexOf(".txt")>=0){//过滤txt文件 fis = new FileInputStream(srcfile); //System.out.println(srcfile.getPath()); int n; byte[] buf = new byte[4096]; while ((n = fis.read(buf, 0, buf.length)) != -1) { write(buf, n); } } else continue; } } //没有子目录,返回 if (!havesubdir) { return; } //处理文件夹 for (int i=0; i<files.length; i++) { srcfile = new File(dir + "/" + files[i]); if (srcfile.isFile()) { continue; } nest(srcfile.getPath()); } }
public void write(byte[] buffer, int end) throws Exception { int p = 0; while (p < end) { if (size >= MaxSize) { descfilenum++; size = 0; fos.close(); fos = new FileOutputStream(descdir + "/" + descfilenum + ".txt"); } int len = end - p; if ((size+len) > MaxSize) { int m = (int)(MaxSize - size); fos.write(buffer, p, m); p += m; size += m; } else { fos.write(buffer, p, end-p); size += (end - p); p = end; } } }
public static void main(String[] args) { try { File_csdn1 f = new File_csdn1("/root/temp", "/root/temp1"); f.go(); } catch (Exception e) { e.printStackTrace(); } }}注意:descdir不应该是srcdir的子目录,否则容易发生混乱,程序会出错
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Files {
String srcdir = "src";
String descdir = "desc"; File srcfile = null;
FileInputStream fis = null;
FileOutputStream fos = null;
int descfilenum = 1;
long size = 0;
final long MaxSize = 1024*1000; //1M public Files() {
} public Files(String src, String desc) {
srcdir = src;
descdir = desc;
} public void go() throws Exception {
srcfile = new File(srcdir);
if ((!srcfile.exists()) || (!srcfile.isDirectory())) {
throw new Exception("\"" + srcdir + "\" dir does not exist!");
} File descfile = new File(descdir);
if ((!descfile.exists()) || (!srcfile.isDirectory())) {
descfile.mkdir();
}
fos = new FileOutputStream(descdir + "\\" + descfilenum + ".txt");
nest(srcdir);
fos.close();
}
public void nest(String dir) throws Exception {
srcfile = new File(dir);
String[] files = srcfile.list();
boolean havesubdir = false;
//处理文件
for (int i=0; i<files.length; i++) {
srcfile = new File(dir + "\\" + files[i]);
if (srcfile.isDirectory()) {
havesubdir = true;
continue;
} else {
fis = new FileInputStream(srcfile);
System.out.println(srcfile.getPath());
int n;
byte[] buf = new byte[4096];
while ((n = fis.read(buf, 0, buf.length)) != -1) {
write(buf, n);
}
}
}
//没有子目录,返回
if (!havesubdir) {
return;
}
//处理文件夹
for (int i=0; i<files.length; i++) {
srcfile = new File(dir + "\\" + files[i]);
if (srcfile.isFile()) {
continue;
}
nest(srcfile.getPath());
} } public void write(byte[] buffer, int end) throws Exception {
int p = 0;
while (p < end) {
if (size >= MaxSize) {
descfilenum++;
size = 0;
fos.close();
fos = new FileOutputStream(descdir + "\\" + descfilenum + ".txt");
} int len = end - p;
if ((size+len) > MaxSize) {
int m = (int)(MaxSize - size);
fos.write(buffer, p, m);
p += m;
size += m;
} else {
fos.write(buffer, p, end-p);
size += (end - p);
p = end;
}
}
}
public static void main(String[] args) {
try {
Files f = new Files("src", "dest");
f.go();
} catch (Exception e) {
e.printStackTrace();
}
}}
看看兄弟我这个
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;public class TestRead { /**
* @param args
*/
static int fileNumber=1;
public void fileOp(File file)
{
if(file.isDirectory())
{
File[] files=file.listFiles();
for(int i=0;i<files.length;i++)
{
File tempFile=files[i];
if(tempFile.isFile())
{
if(tempFile.getName().lastIndexOf(".txt")>=0)
{
copyData(tempFile);
System.out.println(fileNumber);
}
}
else
{
fileOp(tempFile);
}
}
}
}
private void copyData(File file)
{
try
{
File tempWriteFile=new File("/temp/"+String.valueOf(fileNumber)+".txt");
BufferedReader br=new BufferedReader(new FileReader(file));
BufferedWriter bw=null;
String tempBr=null;
tempBr=br.readLine();
while(tempBr!=null)
{
if(tempWriteFile.length()>=1024)
{
fileNumber++;
}
tempWriteFile=new File("/temp/"+String.valueOf(fileNumber)+".txt");
bw=new BufferedWriter(new FileWriter(tempWriteFile,true));
bw.write(tempBr + "\r\n");
tempBr=br.readLine();
}
bw.close();
br.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
File file=new File("/");
(new TestRead()).fileOp(file);
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;public class TestRead { /**
* @param args
*/
private static int fileNumber=1;
private File tempWriteFile=null;
private BufferedWriter bw=null;
public void fileOp(File file,String temp)
{
if(file.isDirectory()&&!file.equals(new File(temp)))
{
File[] files=file.listFiles();
if(files!=null)
{
for(int i=0;i<files.length;i++)
{
File tempFile=files[i];
if(tempFile.isFile())
{
if(tempFile.getName().lastIndexOf(".txt")>=0)
{
copyData(tempFile,temp);
System.out.println(tempFile.getAbsolutePath());
}
}
else
{
fileOp(tempFile,temp);
}
}
}
}
}
private void copyData(File file,String temp)
{
try
{
this.tempWriteFile=new File(temp+"/"+String.valueOf(fileNumber)+".txt");
BufferedReader br=new BufferedReader(new FileReader(file));
this.bw=new BufferedWriter(new FileWriter(tempWriteFile,true));
String tempBr=null;
tempBr=br.readLine();
while(tempBr!=null)
{
if(this.tempWriteFile.length()+tempBr.length()>=1024*1024)
{
this.bw.close();
fileNumber++;
this.tempWriteFile=new File(temp+"/"+String.valueOf(fileNumber)+".txt");
this.bw=new BufferedWriter(new FileWriter(tempWriteFile,true));
}
bw.write(tempBr + "\r\n");
tempBr=br.readLine();
}
bw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
File file=new File("c:/");
(new TestRead()).fileOp(file,"e:/test/temp");
System.out.print("Finished!");
}
}
java.io.BufferedReader;
java.io.BufferedWriter;
比较好
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;public class TestRead { /**
* @param args
*/
private static int fileNumber=1;
private File tempWriteFile=null;
private BufferedWriter bw=null;
public void fileOp(File file,String temp)
{
if(file.isDirectory()&&!file.equals(new File(temp)))
{
File[] files=file.listFiles();
if(files!=null)
{
for(int i=0;i<files.length;i++)
{
File tempFile=files[i];
if(tempFile.isFile())
{
if(tempFile.getName().lastIndexOf(".txt")>=0)
{
copyData(tempFile,temp);
System.out.println(tempFile.getAbsolutePath());
}
}
else
{
fileOp(tempFile,temp);
}
}
}
}
}
private void copyData(File file,String temp)
{
try
{
this.tempWriteFile=new File(temp+"/"+String.valueOf(fileNumber)+".txt");
BufferedReader br=new BufferedReader(new FileReader(file));
this.bw=new BufferedWriter(new FileWriter(tempWriteFile,true));
String tempBr=null;
tempBr=br.readLine();
while(tempBr!=null)
{
if(this.tempWriteFile.length()+tempBr.length()>=1024*1024)
{
this.bw.close();
fileNumber++;
this.tempWriteFile=new File(temp+"/"+String.valueOf(fileNumber)+".txt");
this.bw=new BufferedWriter(new FileWriter(tempWriteFile,true));
}
bw.write(tempBr + "\r\n");
tempBr=br.readLine();
}
bw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
String savedDoc="e:/temp";
String srcDoc="e:/";
File file=new File(srcDoc);
File savedDocFile=new File(savedDoc);
if(savedDocFile.exists())
{
File[] fileTemp;
fileTemp=savedDocFile.listFiles();
for(int i=0;i<fileTemp.length;i++)
{
fileTemp[i].delete();
}
}
else
{
savedDocFile.mkdir();
}
(new TestRead()).fileOp(file,savedDoc);
System.out.print("Finished!");
}
}
hdhmail2000(禅剑飞雪)的程序中,不能正确分割文件大小,我用每个文件1k来测试,结果有的文件竟然是2.2k,不过我也没看出程序中错误的地方
下面是本人对gzpoplar(poplar) 程序的改进:
package csdn.example;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class File_csdn1 {
String srcdir = "src";
String descdir = "desc";
File srcfile = null;
FileInputStream fis = null;
FileOutputStream fos = null;
int descfilenum = 1;
long size = 0;
final long MaxSize = 1024*1024;//1M
public File_csdn1() {
}
public File_csdn1(String src, String desc) {
srcdir = src;
descdir = desc;
}
public void go() throws Exception {
srcfile = new File(srcdir);
if ((!srcfile.exists()) || (!srcfile.isDirectory())) {
throw new Exception("\"" + srcdir + "\" dir does not exist!");
}
File descfile = new File(descdir);
if ((!descfile.exists()) || (!srcfile.isDirectory())) {
descfile.mkdir();
}
fos = new FileOutputStream(descdir + "/" + descfilenum + ".txt");
nest(srcdir);
fos.close();
}
public void nest(String dir) throws Exception {
srcfile = new File(dir);
String[] files = srcfile.list();
boolean havesubdir = false;
//处理文件
for (int i=0; i<files.length; i++) {
srcfile = new File(dir + "/" + files[i]);
if (srcfile.isDirectory()) {
havesubdir = true;
continue;
}
else {
if(srcfile.getName().lastIndexOf(".txt")>=0){//过滤txt文件
fis = new FileInputStream(srcfile);
//System.out.println(srcfile.getPath());
int n;
byte[] buf = new byte[4096];
while ((n = fis.read(buf, 0, buf.length)) != -1) {
write(buf, n);
}
}
else
continue;
}
}
//没有子目录,返回
if (!havesubdir) {
return;
}
//处理文件夹
for (int i=0; i<files.length; i++) {
srcfile = new File(dir + "/" + files[i]);
if (srcfile.isFile()) {
continue;
}
nest(srcfile.getPath());
}
}
public void write(byte[] buffer, int end) throws Exception {
int p = 0;
while (p < end) {
if (size >= MaxSize) {
descfilenum++;
size = 0;
fos.close();
fos = new FileOutputStream(descdir + "/" + descfilenum + ".txt");
}
int len = end - p;
if ((size+len) > MaxSize) {
int m = (int)(MaxSize - size);
fos.write(buffer, p, m);
p += m;
size += m;
}
else {
fos.write(buffer, p, end-p);
size += (end - p);
p = end;
}
}
}
public static void main(String[] args) {
try {
File_csdn1 f = new File_csdn1("/root/temp", "/root/temp1");
f.go();
} catch (Exception e) {
e.printStackTrace();
}
}}注意:descdir不应该是srcdir的子目录,否则容易发生混乱,程序会出错
想想如果用txt文件的,总不能一边半行吧?
想想如果用txt文件的,总不能一边半行吧?
--------------------------------------------
呵呵,有道理,不过,我是以每个文件1k的大小来存储的,结果文件却为2.2k,2.3k
多谢啦!
还是字节流的读取比较准确,gzpoplar(poplar)的方法挺好,hbcui1984的补充很及时,谢谢啦!