关于file.list();方法的疑问

孤独野鸡战士 发布于 2017/09/22 15:00
阅读 77
收藏 0

这是我的源码:

import java.io.*;
import java.util.Scanner;
public class FileList {
	public static void main(String[] args) {
		System.out.println("输入一个路径:");
		String dirname = new Scanner(System.in).nextLine();
		File file = new File(dirname);
		if(file.isDirectory()) {
			System.out.println("目录"+dirname);
			String str[] = file.list();
			for(int i=0;i<str.length;i++) {
				File file2 = new File(str[i]);  //dirname+"/"+
				if(file2.isDirectory()) {
					System.out.println(str[i]+"是一个目录");
				}else {
					System.out.println(str[i]+"是一个文件");
				}
			}
		}else {
			System.out.println(dirname+"不是一个目录");
		}
	}
}

这是跑出来的结果:

输入一个路径:
C:\Program Files\Java\jdk1.8.0_144
目录C:\Program Files\Java\jdk1.8.0_144
bin是一个目录
COPYRIGHT是一个文件
db是一个文件
include是一个文件
javafx-src.zip是一个文件
jre是一个文件
lib是一个文件
LICENSE是一个文件
README.html是一个文件
release是一个文件
src.zip是一个文件
THIRDPARTYLICENSEREADME-JAVAFX.txt是一个文件
THIRDPARTYLICENSEREADME.txt是一个文件

这是改正后的源码:

import java.io.*;
import java.util.Scanner;
public class FileList {
	public static void main(String[] args) {
		System.out.println("输入一个路径:");
		String dirname = new Scanner(System.in).nextLine();
		File file = new File(dirname);
		if(file.isDirectory()) {
			System.out.println("目录"+dirname);
			String str[] = file.list();
			for(int i=0;i<str.length;i++) {
				File file2 = new File(dirname+"/"+str[i]); 
				if(file2.isDirectory()) {
					System.out.println(str[i]+"是一个目录");
				}else {
					System.out.println(str[i]+"是一个文件");
				}
			}
		}else {
			System.out.println(dirname+"不是一个目录");
		}
	}
}

修正后跑出来的结果:

输入一个路径:
C:\Program Files\Java\jdk1.8.0_144
目录C:\Program Files\Java\jdk1.8.0_144
bin是一个目录
COPYRIGHT是一个文件
db是一个目录
include是一个目录
javafx-src.zip是一个文件
jre是一个目录
lib是一个目录
LICENSE是一个文件
README.html是一个文件
release是一个文件
src.zip是一个文件
THIRDPARTYLICENSEREADME-JAVAFX.txt是一个文件
THIRDPARTYLICENSEREADME.txt是一个文件
 

为什么在第一段代码中File file2 = new File(dirname+"/"+str[i]); 里没有 dirname+"/"+ 后第一个目录也能被识别,但是之后的目录全被忽略了??小白不懂,求大佬解释一下

加载中
0
秋痕
秋痕

你弄错了吧  我按照你的第一种方式   路径都是错误的   文件不存在  结果都是  “这是一个文件”。你要是能够匹配到 难道是你根目录刚好有个bin 文件夹?  巧合了?

0
GestureWei
GestureWei

File的list方法返回的是某个目录下面的文件的名称,字符串里并不是绝对路径。所以第一段代码里面的创建的没有父目录路径的文件对象,默认以当前目录作为父目录,所以两个结果不一样。第一种方式下,文件不存在的时候isDirectory同样返回法拉色

0
青衣不恋
青衣不恋

list:目录下文件或文件夹的名字 

listfile:目录下的文件

所以直接用listfile会好一些

如果需要拼路径,那么用absolutepath这个方法就可以获取全路径了 

返回顶部
顶部