import?java.io.File;
創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)貴港,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
/*
*?獲取功能:
*?public?String[]?list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組
*?public?File[]?listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
*/
public?class?FileDemo?{
public?static?void?main(String[]?args)?{
//?指定一個(gè)目錄
File?file?=?new?File("e:\\");
//?public?String[]?list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組
String[]?strArray?=?file.list();
for?(String?s?:?strArray)?{
System.out.println(s);
}
System.out.println("------------");
//?public?File[]?listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組
File[]?fileArray?=?file.listFiles();
for?(File?f?:?fileArray)?{
System.out.println(f.getName());
}
}
}
java一般存在兩種文件格式,如下:
1.*.java文件是保存源代碼的文本文件
(*代表類名)
使用
javac
*.java可以編譯該文件
使用
java
*可以運(yùn)行該類
2.*.class是用于保存
java類的
二進(jìn)制編碼以及class對象,每一個(gè)
java類都有一個(gè)解釋該類特征的
class對象。*.jar文件
是一種壓縮文件格式
這個(gè)Java類的作用是查找目錄文件中特定文件名的文件,并不是查找文件內(nèi)容。具體代碼如下:
[java] view plain copy
package net.xsoftlab.baike;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
//查找目錄下指定文件名的文件
public class TextSearchFile {
static int countFiles = 0;// 聲明統(tǒng)計(jì)文件個(gè)數(shù)的變量
static int countFolders = 0;// 聲明統(tǒng)計(jì)文件夾的變量
public static File[] searchFile(File folder, final String keyWord) {// 遞歸查找包含關(guān)鍵字的文件
File[] subFolders = folder.listFiles(new FileFilter() {// 運(yùn)用內(nèi)部匿名類獲得文件
@Override
public boolean accept(File pathname) {// 實(shí)現(xiàn)FileFilter類的accept方法
if (pathname.isFile())// 如果是文件
countFiles++;
else
// 如果是目錄
countFolders++;
if (pathname.isDirectory()
|| (pathname.isFile() pathname.getName().toLowerCase().contains(keyWord.toLowerCase())))// 目錄或文件包含關(guān)鍵字
return true;
return false;
}
});
ListFile result = new ArrayListFile();// 聲明一個(gè)集合
for (int i = 0; i subFolders.length; i++) {// 循環(huán)顯示文件夾或文件
if (subFolders[i].isFile()) {// 如果是文件則將文件添加到結(jié)果列表中
result.add(subFolders[i]);
} else {// 如果是文件夾,則遞歸調(diào)用本方法,然后把所有的文件加到結(jié)果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j foldResult.length; j++) {// 循環(huán)顯示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 聲明文件數(shù)組,長度為集合的長度
result.toArray(files);// 集合數(shù)組化
return files;
}
public static void main(String[] args) {// java程序的主入口處
File folder = new File("E:/baidu");// 默認(rèn)目錄
String keyword = "1231";
if (!folder.exists()) {// 如果文件夾不存在
System.out.println("目錄不存在:" + folder.getAbsolutePath());
return;
}
File[] result = searchFile(folder, keyword);// 調(diào)用方法獲得文件數(shù)組
System.out.println("在 " + folder + " 以及所有子文件時(shí)查找對象" + keyword);
System.out.println("查找了" + countFiles + " 個(gè)文件," + countFolders + " 個(gè)文件夾,共找到 " + result.length + " 個(gè)符合條件的文件:");
for (int i = 0; i result.length; i++) {// 循環(huán)顯示文件
File file = result[i];
System.out.println(file.getAbsolutePath() + " ");// 顯示文件絕對路徑
}
}
}
你是搜文件名,還是搜文件內(nèi)容?要是搜文件內(nèi)容可就麻煩了,有可能的話你看看Java的一個(gè)開源庫Lucene。
要是簡單的搜文件名包含的字符串,大致應(yīng)該涉及到文件樹的遍歷算法,最多用一些簡單的正則表達(dá)式來匹配文件名,一般用遞歸可以實(shí)現(xiàn)任意級(jí)目錄樹的搜索。
給你個(gè)簡單的版本吧:
package?test.tool;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileReader;
import?java.io.IOException;
import?java.util.regex.Matcher;
import?java.util.regex.Pattern;
public?class?FindFile?{
private?String?fileName?=?"";
private?String?dir?=?"";
private?Matcher?m?=?null;
private?int?count?=?0;
public?FindFile()?throws?IOException?{
String?f?=?FindFile.class.getResource("findfile.properties").getFile();
BufferedReader?read?=?new?BufferedReader(new?FileReader(f));
dir?=?read.readLine().trim();
fileName?=?read.readLine().trim();
Pattern?p?=?Pattern.compile(fileName);
m?=?p.matcher("");
}
public?void?find()?{
File?root?=?new?File(dir);
for?(File?f?:?root.listFiles())?{
if?(f.isDirectory())?{
dir?=?f.getAbsolutePath();
find();
}?else?{
m.reset(f.getName());
if?(m.find())?{
count++;
System.out.println(f.getAbsolutePath());
}
}
}
}
public?static?void?main(String[]?args)?{
try?{
FindFile?ff?=?new?FindFile();
ff.find();
System.out.println("\n共找到文件數(shù)目:"?+?ff.count);
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
里面用到的findfile.properties,舉個(gè)例子:
F:\download
vod.*.exe
運(yùn)行效果如下:
F:\download\firefox\vodplayer.exe
F:\download\ie\vodplayer.exe
共找到文件數(shù)目:2
File file=new file(“目錄”);
for(FIle f:file。filelist()){
long time=f。lastModified() //得到文件修改日期
將time put 到treemaptime,file
}
取treemap最后一個(gè)值即最新文件!