在Java中确定文件的物理位置和设备状态

时间:2009-10-03 11:12:41

标签: java storage filesystems

我正在编写一个程序,必须保存大量文件。这些可能在不同的设备上,我想知道在Java中执行此操作的最佳方法是什么。我的意思是我需要:

  • 识别文件(或只是目录)所在的设备,并获取该设备的名称或标识符,以保持一致...
  • 能够使用此设备标识符来检查设备是否已插入(如USB笔,是否安装了硬盘驱动器,网络驱动器......)
  • 兼容Windows,Unix等等......

理想的解决方案是某种设备抽象...在文档中我可以看到文件与分区相关但它似乎不是一个正确的抽象或对象文件系统。或者,如果没有合适的java抽象,那么在每个系统上处理这种多样性的最佳方法。

3 个答案:

答案 0 :(得分:1)

Java 7具有Path类,它是对File的改进。请查看http://download.java.net/jdk7/binaries/http://java.sun.com/docs/books/tutorial/essential/io/fileio.html上的教程。

答案 1 :(得分:0)

如果(a)仅在Windows上运行并且(b)需要管理员权限来运行您的程序,则可以通过WMI使用JACOB来完成此操作。

特别要看一下Win32_LogicalDisk课程。这足以获得驱动器类型(IDE,网络,USB等),卷标和卷序列号(这可能足以为您的应用程序唯一标识可移动卷。)

对于更高级的功能(例如获取驱动器序列号),还有其他类,例如Win32_DiskDrive,Win32_DiskPartition,Win32_PhysicalMedia。但是,如果以管理员身份运行,这些只会完全有效。

答案 2 :(得分:0)

快速谷歌出现了http://today.java.net/article/2006/07/05/java-and-usb这可能会有所帮助。至少它描述了几年前的USB支持状态。

我会尝试通过简化问题来避免这个问题。即我会将您的目录保存在文件/文件夹抽象中,然后使用上面的文章生成侦听任何 USB活动的代码。

当然,这种方法要求您在加载目录部分之前检查特定的文件/文件夹。此外,您还需要一个线程来持续监听USB事件,然后在任何 USB设备已连接/断开连接时执行必要的检查,并再次对文件系统执行必要的检查。