java读取其下所有文件夹与文件的路径,具体内容如下
如果在f:\aa文件夹中,有如下图的文件夹与文件:
那么,在java中,则如此读取f:/aa下的所有文件路径:
1、首先由于用到了文件与容器类下的arraylist,所以在开头要引入如下包:
1
2
|
import java.io.*; import java.util.*; |
2、方法如下,其中file dirfile除了盘符,比如f:,以外,能够接受一切合法的路径。由于盘符下含有一些系统文件,拒绝访问,因为读取盘符,可能会出现空指针异常。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//这里是仅仅查询当前路径下的所有文件夹、文件并且存放其路径到文件数组 //由于遇到文件夹不查询其包含所有子文件夹、文件,因此没必要用到递归 public static arraylist<string> dir(file dirfile) throws exception { arraylist<string> dirstrarr = new arraylist<string>(); if (dirfile.exists()) { //直接取出利用listfiles()把当前路径下的所有文件夹、文件存放到一个文件数组 file files[] = dirfile.listfiles(); for (file file : files) { //如果传递过来的参数dirfile是以文件分隔符,也就是/或者\结尾,则如此构造 if (dirfile.getpath().endswith(file.separator)) { dirstrarr.add(dirfile.getpath() + file.getname()); } else { //否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径 dirstrarr.add(dirfile.getpath() + file.separator + file.getname()); } } } return dirstrarr; } |
其上的方法,是不读取f:\aa下的新建文件夹下的xlsx,如果在读取的过程中,遇到文件夹要同时读取其包含所有子文件夹、文件时,则要用到递归,先设置一个全局的动态数组:
1
|
public static arraylist<string> dirallstrarr = new arraylist<string>(); |
然后方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public static void dirall(file dirfile) throws exception { if (dirfile.exists()) { file files[] = dirfile.listfiles(); for (file file : files) { //如果遇到文件夹则递归调用。 if (file.isdirectory()) { // 递归调用 dirall(file); } else { //如果遇到文件夹则放入数组 if (dirfile.getpath().endswith(file.separator)) { dirallstrarr.add(dirfile.getpath() + file.getname()); } else { dirallstrarr.add(dirfile.getpath() + file.separator + file.getname()); } } } } } |
其实在读取的过程中,关键是利用listfiles()方法,获取本文件夹下的所有文件列表,之后和《【java】移动文件夹及其所有子文件与子文件夹》 , 《【java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作》 一样,遇到文件夹则进行递归。
上面整个方法的来起来是这样的一个java文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import java.io.*; import java.util.*; public class filelist { // 设置一个全局动态数组,来存放文件路径 // 主要遍历文件夹,包含所有子文件夹、文件的情况时,用到递归,所以要这样设置 public static arraylist<string> dirallstrarr = new arraylist<string>(); // 这里是仅仅查询当前路径下的所有文件夹、文件并且存放其路径到文件数组 // 由于遇到文件夹不查询其包含所有子文件夹、文件,因此没必要用到递归 public static arraylist<string> dir(file dirfile) throws exception { arraylist<string> dirstrarr = new arraylist<string>(); if (dirfile.exists()) { // 直接取出利用listfiles()把当前路径下的所有文件夹、文件存放到一个文件数组 file files[] = dirfile.listfiles(); for (file file : files) { // 如果传递过来的参数dirfile是以文件分隔符,也就是/或者\结尾,则如此构造 if (dirfile.getpath().endswith(file.separator)) { dirstrarr.add(dirfile.getpath() + file.getname()); } else { // 否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径 dirstrarr.add(dirfile.getpath() + file.separator + file.getname()); } } } return dirstrarr; } public static void dirall(file dirfile) throws exception { if (dirfile.exists()) { file files[] = dirfile.listfiles(); for (file file : files) { // 如果遇到文件夹则递归调用。 if (file.isdirectory()) { // 递归调用 dirall(file); } else { // 如果遇到文件夹则放入数组 if (dirfile.getpath().endswith(file.separator)) { dirallstrarr.add(dirfile.getpath() + file.getname()); } else { dirallstrarr.add(dirfile.getpath() + file.separator + file.getname()); } } } } } public static void main(string[] args) throws exception { file dirfile = new file( "f:/aa" ); system.out.println(dir(dirfile)); dirall(dirfile); system.out.println(dirallstrarr); } } |
运行结果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/yongh701/article/details/45170381