读书人

求好手点拨:“搜索本地硬盘特定文件”

发布时间: 2013-07-01 12:33:04 作者: rapoo

求高手点拨:“搜索本地硬盘特定文件”的代码的书写深层理解。
高手,您好:
我是一名学习软件工程的学生,我碰到了一个需求:
使用Java进行“面向用户的PC进行特定文件类型”的“路径检索”工作。
由于时间紧迫,我得到了一位朋友提供的方法代码:
1import java.io.*;
2
3import javax.swing.filechooser.FileSystemView;
4
5public class Program {
6
7/**
8 * @param args
9 */
10public static void main(String[] args) {
11// TODO Auto-generated method stub
12File[] fsFiles = GetLocalDrivers();
13for (File drivers : fsFiles) {
14// System.out.println(drivers.getPath());
15SearchFiles(drivers);
16}
17}
18
19public static File[] GetLocalDrivers() {
20try {
21FileSystemView fsv = FileSystemView.getFileSystemView();
22File[] fs = File.listRoots();
23return fs;
24} catch (Exception e) {
25return null;
26}
27}
28
29public static void SearchFiles(File dir) {
30File[] files = dir.listFiles();
31if (files != null) {
32for (File file : files) {
33// System.out.println(file.getPath());
34if (file.isDirectory()) {
35SearchFiles(file);
36} else {
37if (file.getPath().endsWith("txt")) {
38System.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
[解决办法]


其实很简单的问题,给你描述的那么复杂,甚至你的描述都听不懂。

12行也是很简单的一个事情啊,就是获取你的磁盘,例如,c盘、d盘等。
后面就是循环遍历每个磁盘了。

遍历的时候,如果是文件夹,向下递归搜索;如果是文件,则判断是不是txt文件,如果是txt文件,则打印文件路径。
[解决办法]
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());
}
}
}
}
}

}

读书人网 >J2SE开发

热点推荐