【发布时间】:2017-03-31 12:18:30
【问题描述】:
我正在尝试在 java 程序中将文件写入文件系统,但是当 df -h(和 df -i)另有说明时,它会失败并抛出“设备上没有剩余空间”的异常。
这是df -h的输出:
Filesystem Size Used Avail Use% Mounted on
udev 5.9G 4.0K 5.9G 1% /dev
tmpfs 1.2G 1.4M 1.2G 1% /run
/dev/sda5 156G 139G 9.1G 94% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 5.9G 105M 5.8G 2% /run/shm
none 100M 28K 100M 1% /run/user
/dev/sda2 105G 102G 2.7G 98% /media/sam/System
/dev/sda3 176G 163G 14G 93% /media/sam/Sam //where I'm trying to write
这是 df -i 的输出:
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 1523763 552 1523211 1% /dev
tmpfs 1526458 584 1525874 1% /run
/dev/sda5 10362880 4750381 5612499 46% /
none 1526458 2 1526456 1% /sys/fs/cgroup
none 1526458 3 1526455 1% /run/lock
none 1526458 191 1526267 1% /run/shm
none 1526458 26 1526432 1% /run/user
/dev/sda2 3832820 1045155 2787665 28% /media/sam/System
/dev/sda3 35769712 22090147 13679565 62% /media/sam/Sam //where I'm trying to write
我正在尝试将文件写入 /media/sam/Sam/。我尝试重新启动我的机器,再次卸载和安装,但没有运气。同样在 Java 中,如果我在 /media/sam/Sam 中创建一个新文件对象并打印使用信息,它会打印 0,如下所示:
File tweetFile = new File( "/media/sam/Sam/" + "test" + ".txt" );
System.out.println( tweetFile.getTotalSpace() ); // prints 0
System.out.println( tweetFile.getFreeSpace()/1000000000 ); // prints 0
System.out.println( tweetFile.getUsableSpace()/1000000000 ); // prints 0
非常感谢任何帮助,因为我一整天都在尝试解决这个问题并且非常沮丧。
编辑 这是抛出的确切消息:
Exception: java.io.IOException: No space left on device
java.io.IOException: No space left on device
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1006)
at utils.FileUtil.writeToFile(FileUtil.java:64)
at experiments.usinglists.tagbasedeval.ToindexTweetsForAUser.main(ToindexTweetsForAUser.java:36)
【问题讨论】:
-
你能打印出确切的错误信息吗
-
你的应用是否有写入目标目录的权限?
-
@ScaryWombat 请查看编辑。
-
@EricM。它确实并且工作正常。面对如果我尝试创建一个文件 - 触摸测试 - 在终端中它也会失败并说“触摸:无法触摸‘测试’:设备上没有剩余空间”。
-
那么,说这个问题与Java编程无关是不是对了?听起来这个问题应该在 superuser.com 上问,因为它不是关于编程,而是关于使用 Unix 系统。
标签: java file-io ubuntu-14.04