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();
}
});
}
}