java写大量文件,内存不足
RT,因为测试需要,决定用java制造大量小文件,大约80w个,但是当制造到10w个左右的时候,就因为内存不足给终止了,现在把关键代码贴出来,求大神指点一下啊……
//每天的文件存储在对应目录下,如1991/09/24产生的文件就存在1991/09/24目录下Java 内存 大量文件
for (; startTime <= stopTime; startTime = MyUtil.getTomorrow(startTime)) {
//生成父路径
parentPath = basepathOfFiles + File.separator + startTime
/ 10000 + File.separator + MyUtil.filenameFormat((startTime / 100) % 100, 2)
+ File.separator + MyUtil.filenameFormat(startTime % 100, 2);
file = new File(parentPath);
file.mkdirs();
//产生每天的小文件
for (int i = 0; i < numOfFiles; i++) {
//生成小文件名
pathOfFile = parentPath + File.separator + MyUtil.filenameFormat(i, 5)
+ ".txt";
try {
//开始写了
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(pathOfFile), "UTF-8"));
writer.write("" + startTime + MyUtil.filenameFormat(i, 3));
writer.write(cContent);
System.out.println("write " + pathOfFile + " ok!");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
//每天的文件存储在对应目录下,如1991/09/24产生的文件就存在1991/09/24目录下
for (; startTime <= stopTime; startTime = MyUtil.getTomorrow(startTime)) {
//生成父路径
parentPath = basepathOfFiles + File.separator + startTime
/ 10000 + File.separator + MyUtil.filenameFormat((startTime / 100) % 100, 2)
+ File.separator + MyUtil.filenameFormat(startTime % 100, 2);
file = new File(parentPath);
file.mkdirs();
//产生每天的小文件
for (int i = 0; i < numOfFiles; i++) {
//生成小文件名
pathOfFile = parentPath + File.separator + MyUtil.filenameFormat(i, 5)
+ ".txt";
try {
//开始写了
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(pathOfFile), "UTF-8"));
writer.write("" + startTime + MyUtil.filenameFormat(i, 3));
writer.write(cContent);
System.out.println("write " + pathOfFile + " ok!");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
writer = null;} catch (Exception e) {
e.printStackTrace();
}
}
}
}
parentPath = null;
file = null;}
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class FileMake {
public static void main(String[] args) throws IOException {
BufferedWriter writer = null;
String dirPath = "d:\\fileMake";
File file = new File(dirPath);
file.mkdirs();
// 产生每天的小文件
for (int i = 0; i < 800000; i++) {
// 生成小文件名
String pathOfFile = dirPath + "\" + i + ".txt";
try {
// 开始写了
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(pathOfFile), "GBK"));
writer.write("" + i);
writer.write("--" + System.currentTimeMillis());
writer.flush();
System.out.println("write " + pathOfFile + " ok!");
} catch (Exception e) {
e.printStackTrace();
} finally {
writer.close();
}
}
}
}