java设备上没有空间_关于ubuntu:java.io.FileNotFoundException和(设备上没有剩余空间)...

我有这个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.(FileOutputStream.java:221)

at java.io.FileOutputStream.(FileOutputStream.java:171)

at java.io.FileWriter.(FileWriter.java:90)

at EnronMailParser.readNPrase(EnronMailParser.java:16)

at EnronMailParser.getInboxFiles(EnronMailParser.java:71)

at EnronMailParser.main(EnronMailParser.java:84)

我检查了驱动器上的空间,但是有太多的空白空间

有些人说它与文件名有关,有些人说它与inode有关,这是一个os问题,我不知道它是什么以及如何解决它。 我在Ubuntu 12.04上。

如果它运行10分钟必须是您正在处理的树中相当大量的文件,然后您将解析后的版本全部写入一个目录(从而展平该树),因此可能只是空间不足或达到限制 在文件数量上。 你能看到/ media / ADATA SH12 / datasets / parsedEnron失败后有多少个文件? 和/ media文件系统上的空间(df -k)

正如您所指出的那样,"设备上没有剩余空间"可能意味着您将缺少存储新文件的文件系统上的inode。 Unix文件系统(包括Ubuntu)通常对存储在文件系统中的每个文件使用称为inode的数据结构。创建文件系统时,inode的数量是固定的,它限制了可以在文件系统中创建的文件数。如果文件系统没有inode,即使有可用空间,也无法创建新文件。

您可以运行df -i以查看每个文件系统有多少个inode以及有多少个可用。

文件系统通常是用大量的inode创建的,因此用完它有点不寻常。文件系统上可能有大量非常小或空的文件。发现一些程序在一些不起眼的目录中悄悄地创建空文件并不罕见。您应该检查文件系统以查看是否有一些文件可以删除。请记住,您正在寻找要删除的大量文件,因为您要释放大量的inode。每个文件的大小并不重要。

如果文件系统没有inode,那么在程序中你可以做很多事情来解决这个问题。如果您的程序是创建一堆空文件的程序,那么您应该重新考虑程序的工作方式。否则,您唯一的选择是在其他地方创建文件,其中inode不是问题。

大多数文件系统对可以在单个目录中的文件数量有限制。我猜你正在达到这个极限。我建议添加一些级别的目录嵌套,以便所有结果文件不会在同一目录中。这里有一些限制信息:https://stackoverflow.com/a/466596/552759。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值