关于JAVA获取Windows系统盘符的问题

兰色季节 2010-04-05 11:01:12
通过Java获取Windows硬盘的盘符;
已经通过Java成功获取了Windows所有磁盘的盘符,包括光驱和软驱,如下:

File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
System.out.println(roots[i]);
}


问题(1):那么如何实现将光驱和软驱或其他类型的盘符筛选掉,只获取硬盘盘符呢?

主要想实现获取Usb外接U盘的功能;
如果在调用Java程序后再插入U盘则可以根据盘符的变化(系统识别并增加U盘盘符),
并成功根据盘符变化取出U盘盘符;

问题(2):那么如果在调用Java程序前就已经插入了U盘,怎么实现获取的盘符列表中哪个是U盘的盘符呢?
...全文
2270 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬砖仔 2012-11-01
  • 打赏
  • 举报
回复
很好很强大的
WSD_WAN 2011-06-24
  • 打赏
  • 举报
回复
niu
beiouwolf 2010-04-12
  • 打赏
  • 举报
回复
查了一下FILE的源代码,的确,JAVA是用JNI拿的系统信息
static private FileSystem fs = FileSystem.getFileSystem();
public static native FileSystem getFileSystem();
估计要拿完整的驱动器信息只有用JNI掉DLL了
zxt12300 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 blueseason1987 的回复:]
引用 10 楼 zxt12300 的回复:
我用1楼兄弟的方法试了下,输出了8楼的错误。
其他兄弟没遇到过吗?

我的可以,直接将盘符信息输出了,没有发生异常呀?
是不是你的磁盘是虚拟的或是其他什么问题。。。
[/Quote]

不是虚拟的,就是实实在在的一个DVD光驱,输出到G盘的时候就抛了,
没办法调试javax的代码,不知道是啥问题!
兰色季节 2010-04-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zxt12300 的回复:]
我用1楼兄弟的方法试了下,输出了8楼的错误。
其他兄弟没遇到过吗?
[/Quote]
我的可以,直接将盘符信息输出了,没有发生异常呀?
是不是你的磁盘是虚拟的或是其他什么问题。。。
jmi443 2010-04-09
  • 打赏
  • 举报
回复
学习了
jacky花园 2010-04-09
  • 打赏
  • 举报
回复
1楼火龙果的标志真他妈牛
小虾啥时候才行~```
zxt12300 2010-04-09
  • 打赏
  • 举报
回复
我用1楼兄弟的方法试了下,输出了8楼的错误。
其他兄弟没遇到过吗?
zxt12300 2010-04-06
  • 打赏
  • 举报
回复
我这里怎么输出错误了呢?我的电脑中有G盘的,是个光驱!

C:\ -- 本地磁盘
D:\ -- 本地磁盘
E:\ -- 本地磁盘
F:\ -- 本地磁盘
FileSystemView.getShellFolder: f=G:\
java.io.FileNotFoundException: File G:\ not found
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
at sun.awt.shell.ShellFolder.getShellFolder(Unknown Source)
at javax.swing.filechooser.FileSystemView.getShellFolder(Unknown Source)
at javax.swing.filechooser.WindowsFileSystemView.getSystemTypeDescription(Unknown Source)
at test.HardDriver.main(HardDriver.java:25)
java.lang.NullPointerException
at javax.swing.filechooser.WindowsFileSystemView.getSystemTypeDescription(Unknown Source)
at test.HardDriver.main(HardDriver.java:25)
Exception in thread "main"
hytdsky 2010-04-06
  • 打赏
  • 举报
回复
第一次遇到 搜藏
zliuzz 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]
Java code
import java.io.File;

import javax.swing.filechooser.FileSystemView;

public class ByteTest {

public static void main(String[] args) {
FileSystemView sys = FileSystemVie……
[/Quote]

学习了
狂想者 2010-04-05
  • 打赏
  • 举报
回复
学习啊!!!!!!!
  • 打赏
  • 举报
回复
按理说应该返回的是一个类型标识,就像 Windows API 中 GetDriveType(http://msdn.microsoft.com/zh-cn/library/aa364939%28v=VS.85%29.aspx) 返回的那些,但是在 Java 中我好像没有找到。

FileSystemView#getSystemTypeDescription 方法只能将究着用用,如果要有更高的要求,只能通过 Windows API 和 JNI 去实现了。

BigBird2012 2010-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bao110908 的回复:]
Java code
import java.io.File;

import javax.swing.filechooser.FileSystemView;

public class ByteTest {

public static void main(String[] args) {
FileSystemView sys = FileSystemVie……
[/Quote]
果子哥正解!
  • 打赏
  • 举报
回复
import java.io.File;

import javax.swing.filechooser.FileSystemView;

public class ByteTest {

public static void main(String[] args) {
FileSystemView sys = FileSystemView.getFileSystemView();
File[] files = File.listRoots();
for(int i = 0; i < files.length; i++) {
System.out.println(files[i] + " -- " + sys.getSystemTypeDescription(files[i]));
}
}
}


我机器上的输出是:

C:\ -- 本地磁盘
D:\ -- 本地磁盘
E:\ -- 本地磁盘
F:\ -- 本地磁盘
G:\ -- CD 驱动器
J:\ -- 可移动磁盘
K:\ -- CD 驱动器
兰色季节 2010-04-05
  • 打赏
  • 举报
回复
非常感谢,学习了

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧