【发布时间】:2014-08-21 23:02:29
【问题描述】:
我有这个Java代码,它应该读取一个0.5M的文件并在删除一些无用的信息后写入(我正在使用安然电子邮件数据集)
public void getInboxFiles(File directory){
File[] usersFolders;
File[] userFolders;
File[] inboxFiles;
usersFolders = directory.listFiles();
for(File temp:usersFolders){
userFolders = temp.listFiles();
for(File temp2:userFolders){
inboxFiles = temp2.listFiles();
for(File tmp3:inboxFiles){
if(tmp3.isDirectory())
continue;
readNPrase(tmp3, new File("/media/ADATA SH12/datasets/parsedEnron/"+temp.getName()+tmp3.getName()+".txt"));
}
}
}
}
函数 readNParse 是:
public void readNPrase(File in,File out){
BufferedReader br=null;
BufferedWriter bw =null;
try{
br = new BufferedReader(new FileReader(in));
bw= new BufferedWriter(new FileWriter(out));
boolean messageContent = false;
String line = null;
while((line = br.readLine()) != null){
if(line.trim().equals(""))
messageContent = true;
if(messageContent && !isHeader(line) && !line.trim().equals("")){
bw.write(line);
bw.newLine();
}
}
bw.flush();
br.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
bw.close();
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
在运行此代码 10 分钟后,它停止工作并给我这个错误:
java.lang.NullPointerException java.io.FileNotFoundException: /media/ADATA SH12/datasets/parsedEnron/causholli-m98.txt (No space left on device)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at java.io.FileWriter.<init>(FileWriter.java:90)
at EnronMailParser.readNPrase(EnronMailParser.java:16)
at EnronMailParser.getInboxFiles(EnronMailParser.java:71)
at EnronMailParser.main(EnronMailParser.java:84)
我检查了驱动器上的空间,但空间太多 有人说和文件名有关,也有人说和inode有关,这是操作系统的问题,我不知道它是什么以及它是如何解决的。我在 Ubuntu 12.04 上。
【问题讨论】:
-
如果它运行 10 分钟必须是您正在处理的树中的大量文件,然后您将解析后的版本全部写入一个目录(因此扁平化该树)所以很可能只是空间不足或达到文件数量限制。你能看到 /media/ADATA SH12/datasets/parsedEnron 失败后有多少文件吗?和 /media 文件系统上的空间 (df -k)