我有一份Java代码,它应该读取一个0.5M的文件并在删除一些无用信息后进行写入(我正在使用Enron电子邮件数据集)。
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。