A. java如何实现搜索功能。比如,输入txt就能搜索出这个文件夹内所有txt格式的文件。请给完整代码。
在Java中实现文件搜索功能,可以使用递归或非递归的方式遍历文件夹及其子文件夹,查找符合特定条件的文件。这里提供一个示例代码,用于搜索给定文件夹内所有指定扩展名的文件。代码如下:
首先,定义一个主方法,该方法接受两个参数:文件路径和文件扩展名。主方法通过调用`getFile`方法实现文件搜索功能。以下是具体实现:
import java.io.*;
public class FileDemo {
public static void main(String[] args) throws Exception {
getFile("D:\\JavaDemo", ".txt");
}
private static void getFile(String pathName, final String endsWith) throws Exception {
File file = new File(pathName);
if (!file.exists())
throw new RuntimeException("文件不存在,你检索个P呀。");
file.listFiles(new FileFilter() {
public boolean accept(File file) {
if (file.getName().endsWith(endsWith)) {
System.out.println(file.getName());
return true;
}
else
return false;
}
});
}
}
该代码首先通过`File`类实例化给定的文件路径,检查文件是否存在,若不存在则抛出异常。接着使用`listFiles`方法递归地列出给定路径下的所有文件。通过`FileFilter`接口实现文件筛选逻辑,仅打印出具有指定扩展名的文件名。
注意,此代码仅适用于简单的文件搜索需求。对于更复杂的场景,如遍历多个文件夹、处理异常情况或优化性能,可能需要进一步调整和扩展。
此外,此示例中使用了`throws Exception`来捕获可能抛出的异常,实际开发中建议具体处理不同类型的异常,以提高代码的健壮性和可读性。
在实际应用中,还可以根据需求对代码进行优化,例如使用递归函数实现更复杂的文件夹搜索逻辑,或者使用`FileInputStream`等其他API处理文件内容。
以上代码示例提供了一个基本的文件搜索框架,适用于初学者理解和学习Java文件操作。
B. 如何在java swing中用树显示所有磁盘
先用静态方法File.listRoots()获取所有磁盘(一个File数组),然后遍历该File数组,用其listFiles()方法来列出该File下的所有文件(包括目录),然后用测试每个文件是否目录(用isDirectory()方法)。如果测试是目录,再递归测试其子目录。
在使用listFiles()方法时,也可以自己构建一个类,实现FileFilter接口,在该接口中判断文件是否目录。FileFilter实现类如下:
public class FileFilterImpl implements FileFilter{
public boolean accept(File file){
return file.isDirectory();
}
}
这样用listFiles(new FileFilterImpl())返回的列表中将都是目录,一般文件不包含在内了。
C. java如何实现文件搜索功能
java实现文件搜索主要使用file类和正则表达式,如下示例:
packagecom.kiritor.util;
importjava.io.File;
importjava.io.FileFilter;
importjava.util.Arrays;
importjava.util.Collections;
importjava.util.List;
/**
*文件的相关操作类
*
*@authorKiritor
*/
publicclassFileOperation{
;
privatestaticStringfilePath;
privatestaticFile[]fileList=null;//保存文件列表,过滤掉目录
publicFileOperation(){
}
/**构造函数的参数是一个目录*/
publicFileOperation(Stringpath){
Filefile=newFile(path);
if(file.isDirectory())
this.contentPath=path;
else
this.filePath=path;
}
/**获取文件列表*/
publicstaticFile[]getFiles(){
if(contentPath==null){
Filefile=newFile(filePath);
fileList=newFile[1];
fileList[0]=file;
returnfileList;
}
fileList=newFile(contentPath).listFiles(newFileFilter(){
/**使用过滤器过滤掉目录*/
@Override
publicbooleanaccept(Filepathname){
if(pathname.isDirectory())
{
returnfalse;
}else
returntrue;
}
});
returnfileList;
}
/**对当前目录下的所有文件进行排序*/
publicstaticFile[]sort(){
getFiles();
Arrays.sort(fileList,newFileComparator());
returnfileList;
}
publicstaticvoidtree(Filef,intlevel){
StringpreStr="";
for(inti=0;i<level;i++){
preStr+="";
}
File[]childs=f.listFiles();
//返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
for(inti=0;i<childs.length;i++){
System.out.println(preStr+childs[i].getName());
if(childs[i].isDirectory()){
tree(childs[i],level+1);
}
}
}
//提供一个"比较器"
.util.Comparator<File>{
@Override
publicintcompare(Fileo1,Fileo2){
//按照文件名的字典顺序进行比较
returno1.getName().compareTo(o2.getName());
}
}
}
D. 用java言语编写一个遍历硬盘里面后缀名为.java的文件名。
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//用来保存java文件的名字的list
List<String> javaFilelist = new ArrayList<String>();
String filePath = "C://111"; //要测试的文件,如果是分区,必须是C://这样子的
getAllFiles(new File(filePath), javaFilelist);
if(javaFilelist.size() == 0){
System.out.println("No java file found under " + filePath);
}
System.out.println("Java file list in " + filePath);
for(String javaFileName: javaFilelist){
System.out.println(javaFileName);
}
}
public static void getAllFiles(File path, List<String> list){
if(path.isFile()){//如果是文件
if(path.getName().matches("^.+\\.java$")){//用正则表达式并且是java文件加入list
list.add(path.getAbsolutePath());
}
}else{//这里加入一个过滤,过滤掉非java文件,只保留java文件和文件夹
File[] fileAry = path.listFiles(new JavaFileFilter());
if(fileAry == null || fileAry.length == 0){
return;
}
for(File file: fileAry){
getAllFiles(file, list);
}
}
}
}
class JavaFileFilter implements FileFilter{
public boolean accept(File pathname) {
if(pathname.isDirectory()){//如果是目录也接受
return true;
}else{//如果是java文件,才接受
return pathname.getName().matches("^.+\\.java$");
}
}
}
-------------
测试文件夹下所有文件及其文件夹,输出应该只有4个文件,11.java, 444.java, test.java, 222.java
C:\111>tree /F
Folder PATH listi
Volume serial num
C:.
│ 11.java
│ abdef.txt
│
├—2
│ 444.java
│ test.java
│
└—3
│ 222.java
│
└—2.java
--------程序输出
Java file list in C://111
C:\111\11.java
C:\111\2\444.java
C:\111\2\test.java
C:\111\3\222.java
E. java 中如何获得根目录下的所有文件夹
import java.io.File;
import java.io.FileFilter;
public class C {
public static void main(String[] args) {
String root = "C:\\";
File file = new File(root);
//folders保存所有根目录下面的文件夹。。
File[] folders = file.listFiles(new FileFilter(){
public boolean accept(File fl) {
return fl.isDirectory();
}
});
}
}