要养成查看API文档的好习惯。File对象的list()方法能够返回实例化File时,传入的字符串类型的路径名称,此方法返回此路径下的所有文件及目录,不带路径。而listFiles()方法则返回实例化File时,传入的抽象字符串类型的路径名称,此方法返回此路径下的所有文件及目录,含有抽象路径。
通常情况下,当我们调用System.out.println(Object obj)方法查看API文档时,会发现System.out返回一个标准的PrintWriter,此PrintWriter是OutputStream的子类。当调用println()方法输出对象时,实际上是调用了对象的toString()方法。如果对象没有重写toString()方法,则直接输出对象的堆内存地址。
查看API文档可以得知,File类的toString()方法会返回实例化File对象时传入的抽象路径。如果你在test方法中,实例化File对象时使用的是list()方法得到的路径,那么此时该抽象路径本身就只含有文件名而没有路径。而另一个方法则使用listFiles()方法,获取到的都是含有抽象路径的文件列表。
因此,当你输出这些文件时,出现的情况就是由于路径信息的不同导致的。在使用list()方法时,没有路径信息,因此直接显示文件名;而在使用listFiles()方法时,包含路径信息,因此显示完整的文件路径。
综上所述,理解API文档对于正确使用文件操作方法至关重要。确保你了解每个方法的返回值及其含义,可以避免很多不必要的错误。
② java 循环读取文件夹里面的文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
1.不使用递归的方法调用。
public void traverseFolder1(String path) {
int fileNum = 0, folderNum = 0;
File file = new File(path);
if (file.exists()) {
LinkedList<File> list = new LinkedList<File>();
File[] files = file.listFiles();
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夹:" + file2.getAbsolutePath());
list.add(file2);
fileNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
folderNum++;
}
}
File temp_file;
while (!list.isEmpty()) {
temp_file = list.removeFirst();
files = temp_file.listFiles();
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夹:" + file2.getAbsolutePath());
list.add(file2);
fileNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
folderNum++;
}
}
}
} else {
System.out.println("文件不存在!");
}
System.out.println("文件夹共有:" + folderNum + ",文件共有:" + fileNum);
}
2.使用递归的方法调用
public static List<File> getFileList(String strPath) {
File dir = new File(strPath);
File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
if (files[i].isDirectory()) { // 判断是文件还是文件夹
getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径
} else if (fileName.endsWith("avi")) { // 判断文件名是否以.avi结尾
String strFileName = files[i].getAbsolutePath();
System.out.println("---" + strFileName);
filelist.add(files[i]);
} else {
continue;
}
}
}
return filelist;
}
③ java怎么获取一个目录下的所有文件名
获取一个目录下的所有文件和目录方法:
importjava.io.File;
publicclassFileTest{
publicstaticvoidmain(String[]args){
/**
*将目标目录封装成File对象。
*/
Filedir=newFile("/Users/zym/Desktop/Mac应用程序");
/**
*获取目录下的所有文件和文件夹
*/
String[]names=dir.list();
for(Stringname:names){
System.out.println(name);
}
}
}
通过文件过滤器获取某个目录下的文件,例如所有的 .txt、.doc文件。
过滤器:
importjava.io.File;
importjava.io.FilenameFilter;
{
@Override
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith(".doc");
}
}
获取某个目录下的按照过滤器规则的所有文件:
importjava.io.File;
publicclassFileTest{
publicstaticvoidmain(String[]args){
/**
*将目标目录封装成File对象。
*/
Filedir=newFile("/Users/zym/Desktop/Mac应用程序");
/**
*通过过滤器获取目录下的所有的.doc文件
*/
String[]names=dir.list(newFilterByDoc());
for(Stringname:names){
System.out.println(name);
}
}
}
希望能对您有所帮助!
④ java怎么循环读取目录下的文件内容
在Java中,遍历文件夹下的所有文件可以采用递归调用和非递归调用两种方法。这里提供一个非递归调用的例子:
首先定义一个函数traverseFolder1,该函数接受一个字符串类型的参数path,表示待遍历的文件夹路径。函数内部定义了一个链表list,用于存储待遍历的文件夹。接着通过判断文件夹是否存在,获取其下的所有文件和子文件夹。
然后使用while循环和链表的removeFirst方法,将链表中的文件夹逐个取出,继续获取其下的文件和子文件夹,直到链表为空。
如果使用递归方法遍历文件夹,可以定义一个函数getFileList,该函数接受一个字符串类型的参数strPath,表示待遍历的文件夹路径。首先获取该文件夹下的所有文件和子文件夹。
通过循环遍历数组files,如果当前文件是文件夹,则调用自身进行递归遍历;如果当前文件满足特定条件(例如文件名为avi格式),则将文件路径加入filelist集合。
两种方法各有优劣,非递归方法避免了递归调用可能带来的栈溢出问题,但代码复杂度相对较高。而递归方法简洁易懂,但可能遇到栈溢出的问题。
这两种方法都是Java中常用的遍历文件夹的方法,适用于不同场景。在实际开发中,可以根据具体需求选择合适的方法实现。
⑤ java怎样获得某个目录下所有文件的文件名
如下代码使用递归算法遍历某个目录下的所有文件,并输出文件名
importjava.io.File;
importjava.util.ArrayList;
publicclassFileTest{
privatestaticArrayList<String>filelist=newArrayList<String>();
publicstaticvoidmain(String[]args)throwsException
{
StringfilePath="E://Struts2";
getFiles(filePath);
}
/*
*通过递归得到某一路径下所有的目录及其文件
*/
staticvoidgetFiles(StringfilePath)
{
Fileroot=newFile(filePath);
File[]files=root.listFiles();
for(Filefile:files)
{
if(file.isDirectory())
{
/*
*递归调用
*/
getFiles(file.getAbsolutePath());
filelist.add(file.getAbsolutePath());
System.out.println("显示"+filePath+"下所有子目录及其文件"+file.getAbsolutePath());
}else{
System.out.println("显示"+filePath+"下所有子目录"+file.getAbsolutePath());
}
}
}
}