import java.util.ArrayList
import java.util.Iterator
import java.util.List
public class GetDir {
//用于存储地址的动态数组
private static List addresses = new ArrayList()
//用于存储地址的数组
private static Object[] addresses_str = null
public static void main(String[] args) {
System.out.println("请稍等,数据加载需要一定时间............................")
getDirInTray(new File("C:/"))
//测试动态数组列表内容是否是所有地址
for(Iterator ite = addresses.iterator()ite.hasNext()){
System.out.println(ite.next())
}
System.out.println("============================================================")
//通过字符串数组进行接收所有路径
addresses_str =addresses.toArray()
//打印该数组,确保正确
for(int i = 0i<addresses_str.lengthi++){
System.out.println(addresses_str[i])
}
}
//得到指定盘符dir下所有路径
/*
* @param dir表示需要指定的盘符
* */
public static void getDirInTray(File dir){
//获取指定盘符下的所有文件列表。(listFiles可以获得指定路径下的所有文件,以数组方式返回)
File[] files = dir.listFiles()
//如果该目录下面为空,则该目录的此方法执行
if(files == null){
return
}
//通过循环将所遍历所有文件
for(int i=0i<files.lengthi++){
//isDirectory方法用于判断当前的文件是不是路径,如果是就返回true
if(files[i].isDirectory()){
//如果是路径,则通过getAbsolutePath得到它的绝对路径,并打印到控制台
//System.out.println(files[i].getAbsolutePath())
//将路径加到List中
addresses.add(files[i].getAbsolutePath())
//通过递归算法调用自身,进行对当前文件的getDirInTray方法的调用
getDirInTray(files[i])
}
}
}
}
/*
* 这里的难点主要在递归算法,如果你懂了,那就很容易理解
* 大量用到了File类的API,可以借助于JDK进行对File类的API进行更深入的了解
* */
/*
我先放在了动态数组ArrayList中,然后将动态数组转换成Object[]数组。
*/
使用sigar,private static void file() throws Exception {
Sigar sigar = new Sigar()
FileSystem fslist[] = sigar.getFileSystemList()
for (int i = 0i <fslist.lengthi++) {
System.out.println("分区的盘符名称" + i)
FileSystem fs = fslist[i]
// 分区的盘符名称
System.out.println("盘符名称:" + fs.getDevName())
// 分区的盘符名称
System.out.println("盘符路径:" + fs.getDirName())
System.out.println("盘符标志:" + fs.getFlags())//
// 文件系统类型,比如 FAT32、NTFS
System.out.println("盘符类型:" + fs.getSysTypeName())
// 文件系统类型名,比如本地硬盘、光驱、网络文件系统等
System.out.println("盘符类型名:" + fs.getTypeName())
// 文件系统类型
System.out.println("盘符文件系统类型:" + fs.getType())
switch (fs.getType()) {
case 0: // TYPE_UNKNOWN :未知
break
case 1: // TYPE_NONE
break
case 2: // TYPE_LOCAL_DISK : 本地硬盘
// 文件系统总大小
FileSystemUsage usage = null
usage = sigar.getFileSystemUsage(fs.getDirName())
System.out.println(fs.getDevName() + "总大小:" + usage.getTotal() + "KB")
// 文件系统剩余大小
System.out.println(fs.getDevName() + "剩余大小:" + usage.getFree() + "KB")
// 文件系统可用大小
System.out.println(fs.getDevName() + "可用大小:" + usage.getAvail() + "KB")
// 文件系统已经使用量
System.out.println(fs.getDevName() + "已经使用量:" + usage.getUsed() + "KB")
double usePercent = usage.getUsePercent() * 100D
// 文件系统资源的利用率
System.out.println(fs.getDevName() + "资源的利用率:" + usePercent + "%")
break
case 3:// TYPE_NETWORK :网络
break
case 4:// TYPE_RAM_DISK :闪存
break
case 5:// TYPE_CDROM :光驱
break
case 6:// TYPE_SWAP :页面交换
break
}
}
return
}
问了一下我远标出来的程序员哥们,她说,你看下对不对swing下的包,javax.swing.filechooser.FileSystemView可以获取:
FileSystemView fileSys=FileSystemView.getFileSystemView()//获取当前系统文件类型
//获取系统的所有盘符或系统卷类型
for(File f:File.listRoots()){
System.out.println(fileSys.getSystemDisplayName(f))//获取系统卷标及名字
System.out.println(fileSys.getSystemTypeDescription(f))//获取系统卷的类型
System.out.println(f.getTotalSpace())//获取该卷大小(单位:字节)
System.out.println(f.getFreeSpace())//获取该卷可用大小(单位:字节)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)