高手,您好:
    我是一名学习软件工程的学生,我碰到了一个需求:
    使用Java进行“面向用户的PC进行特定文件类型”的“路径检索”工作。
    由于时间紧迫,我得到了一位朋友提供的方法代码:
1import java.io.*;
2
3import javax.swing.filechooser.FileSystemView;
4
5public class Program {
6
7 /**
8  * @param args
9  */
10 public static void main(String[] args) {
11 // TODO Auto-generated method stub
12 File[] fsFiles = GetLocalDrivers();
13 for (File drivers : fsFiles) {
14 // System.out.println(drivers.getPath());
15 SearchFiles(drivers);
16 }
17 }
18
19 public static File[] GetLocalDrivers() {
20 try {
21 FileSystemView fsv = FileSystemView.getFileSystemView();
22 File[] fs = File.listRoots();
23 return fs;
24 } catch (Exception e) {
25 return null;
26 }
27 }
28
29 public static void SearchFiles(File dir) {
30 File[] files = dir.listFiles();
31 if (files != null) {
32 for (File file : files) {
33 // System.out.println(file.getPath());
34 if (file.isDirectory()) {
35 SearchFiles(file);
36 } else {
37 if (file.getPath().endsWith("txt")) {
38 System.out.println(file.getPath());
39 }
40 }
41 }
42 }
43 }
44
45}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    上文中的代码,应该是“查找txt文件类型”的方法。
    对与上文中的代码,我有下面几个问题,还不能理解:
    我一直认为:File类的作用,是“定位一个待操作的文件的路径”的作用。
    但是,今天我看到了第12行代码,我不禁产生了下面的疑问:
    1.是否任何一个在Java中的引用类型的数据类型,都能够“进行自身对象的创建”和“自身对象数组的创建”?甚至包括:Thread类,FileOutputStream类,还有FlowLayout类等等所有只要是在Java中出现过的类,全部都能够进行上述动作:“创建自身对象”“创建自身对象数组”的进行吗?
    2.“抽象路径”,这个概念,的具体含义是什么?现在我的印象中,它的含义是:
    一个面向Windows,UNIX,安卓....等各种操作系统这些“各个国家不同形式的方言”,所进行的“整体语义的标准统一”:相当于一个表达存储路径的所在位置的面向不同操作系统的“世界语”。
    3.如果高手有时间,希望高手能够为弟我得到的代码,根据每一行,进行一下“1-->45行”的“配有行号的”“清晰的代码语义注释”。
    这个作品,是我学习软件工程以来的第一个“完整的亲手制作”的作品,意义重大。
    如果高手能够帮我,愿意与您成为一生的朋友。
    100分奉上
    敬礼
                                                        一颗向着天空生长的小菜Java搜索文件方法硬盘操作系统Java SE

解决方案 »

  1.   

    其实很简单的问题,给你描述的那么复杂,甚至你的描述都听不懂。12行也是很简单的一个事情啊,就是获取你的磁盘,例如,c盘、d盘等。
    后面就是循环遍历每个磁盘了。遍历的时候,如果是文件夹,向下递归搜索;如果是文件,则判断是不是txt文件,如果是txt文件,则打印文件路径。
      

  2.   

    1.任何Java类,在设计的时候,都可以设计出类似工厂模式的方法,创建几个相同类下面的不同(或者相同)对象。但是,究竟是否要这样干,取决于程序是否需要。
    2.抽象路径,这个我不太了解,因为一般都不怎么使用相关的方法。
    3.
    import java.io.*;import javax.swing.filechooser.FileSystemView;public class Program { /**
     * 测试用例的入口函数
     */
    public static void main(String[] args) {
    // 列出当前系统中的所有逻辑盘
    File[] fsFiles = GetLocalDrivers();
    //迭代逻辑盘。进行文件扫描。
    for (File drivers : fsFiles) {
    //扫描文件
    SearchFiles(drivers);
    }
    } /**
     * 返回当前系统的所有逻辑盘。
     */
    public static File[] GetLocalDrivers() {
    try {
    //这句话(fsv这句)是不产生任何作用,应该删除。
    FileSystemView fsv = FileSystemView.getFileSystemView();
    //调用File类的静态方法,返回系统当前的逻辑盘(windows系统)。
    File[] fs = File.listRoots();
    return fs;
    } catch (Exception e) {
    return null;
    }
    } /**
     * 扫描文件
     * @param dir 被扫描的文件夹(或者windows系统的逻辑盘)
     */
    public static void SearchFiles(File dir) {
    //列出文件夹下的所有文件(文件夹)。
    File[] files = dir.listFiles();
    if (files != null) {//如果文件夹不是空文件夹
    //迭代当前列出的所有文件(文件夹)。扫描过程。
    for (File file : files) {
    //如果迭代出的是文件夹,就递归调用、接着扫描;
    //如果迭代出的是文件,那么,判断扩展名,进行打印输出。
    if (file.isDirectory()) {
    SearchFiles(file);//递归扫描子文件夹
    } else {
    //判断文件扩展名。严格来讲,程序不太准确。
    //可以考虑  if (file.getPath().endsWith(".txt")) {
    //windows系统的扩展名,是以点号分隔的。
    if (file.getPath().endsWith("txt")) {
    System.out.println(file.getPath());
    }
    }
    }
    }
    }}
      

  3.   

    preferme哥,谢谢您的点拨!!
        您讲述的很清晰!!
        感谢您对我,这个刚拜詹姆斯为师的徒弟所给予的帮助与鼓励!!
        谢谢您!!
        90分,是我的一点点“感激的心意”...
    --------------------------------------------------------------------------------------------------
    rumlee,辛苦了。
    给你10分儿,再接再励。