直接貼代碼吧。不過這里要做一個簡單的說明,對於這個程序,我們必須保證我們在C盤下有一個Users\HP\Desktop的文件夾,因為在後面寫入文件的時候,如果路徑中的文件不存在,是程序可以自動為其添加,但如果沒有了這個路徑,則程序會報找不到文件路徑的異常。你可以對這個異常進行人性的處理,還可以在程序要向這個路徑寫入數據之前,創建出這個路徑。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
public class ListRoots {
private static final String LOG_BASE_PATH = "C:\\Users\HP\\Desktop\\";
private static ArrayList<String> mfiles = new ArrayList<String>();
/**
* 得到給定路徑下的目錄或是文件
* @param strPath
* @throws Exception
*/
private static void displayDirsOrFiles(String strPath) throws Exception {
try {
File f = new File(strPath);
if (f.isDirectory()) {
File[] fList = f.listFiles();
for (int j = 0; j < fList.length; j++) {
if (fList[j].isDirectory()) {
System.out.println("Directory is: " + fList[j].getPath());
displayDirsOrFiles(fList[j].getPath()); // 對當前目錄下仍是目錄的路徑進行遍歷
}
}
for (int j = 0; j < fList.length; j++) {
if (fList[j].isFile()) {
String name = fList[j].getPath().toString();
System.out.println("Filename is: " + name);
mfiles.add(fList[j].getPath());
}
}
}
} catch (Exception e) {
System.err.println("Error: " + e);
}
}
/**
* 向文件中寫入數據
* @param dirOrfiles
* @throws IOException
*/
private static void writeDetailToFiles(ArrayList<String> dirOrfiles) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd H:m:s");
toFiles(getLogPath(), format.format(new Date()) + " -- 檢測到文件" + dirOrfiles.size() + "個:" + "\r\n");
for (String file : dirOrfiles) {
toFiles(getLogPath(), file + "\r\n");
}
toFiles(getLogPath(), "--------------------------------------------------------------------------------------------------------------------------\r\n");
}
/**
* 獲得寫入數據的路徑
* @return
*/
private static String getLogPath() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return LOG_BASE_PATH + format.format(new Date()) + ".txt";
}
/**
* 向dir路徑下寫入數據data
* @param path
* @param data
*/
private static void toFiles(String path, String data) throws IOException {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file, true);
fw.write(data);
fw.flush();
fw.close();
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("請輸入待遍歷目錄路徑(Format: F:\\a\\b):");
String strPath = input.nextLine();
try {
displayDirsOrFiles(strPath.replace("\\", "\\\\"));
writeDetailToFiles(mfiles);
} catch (Exception e) {
e.printStackTrace();
}
}
}
㈡ java怎麼樣獲取路徑下的文件
//根據你的要求修改了一下代碼,現在已經能將某文件夾下的所有指定類型文件復制到
//指定文件夾下了
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class ReadFiles {
public static final String FILTER = "xml";
public static final String SRC_DIR = "E:\\StudyData";// 待掃描的文件夾
public static final String DES_DIR = "E:\\testdata";// 復制後的目標文件夾
public static void main(String[] args) {
long a = System.currentTimeMillis();
scanDir(SRC_DIR, DES_DIR);
System.out.println("共花費時間:"+(System.currentTimeMillis() - a)/1000+"秒");
}
public static void scanDir(String srcPath, String desPath) {
File dir = new File(srcPath);
File[] files = dir.listFiles();
if (files == null)
return;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
scanDir(files[i].getAbsolutePath(), desPath);
} else {
String strFileName = files[i].getAbsolutePath().toLowerCase();
File(strFileName, desPath + files[i].getName());
}
}
}
public static void File(String srcName, String destName) {
if (srcName.endsWith(FILTER)) {
System.out.println("正在復制文件 "+srcName+" 至 "+destName);
try {
BufferedInputStream in = new BufferedInputStream(
new FileInputStream(srcName));
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(destName));
int i = 0;
byte[] buffer = new byte[2048];
while ((i = in.read(buffer)) != -1) {
out.write(buffer, 0, i);
}
out.close();
in.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
㈢ Java 找出某一個文件夾下的所有文件
要養成看API文檔的好習慣。
查看API可以看出,
File對象的 String[] list()方法:
Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname.
意思很明確,返回實例化File時,傳入的字元串類型的路徑名稱,此方法返回此路徑下的所有文件及目錄,不帶路徑,
File對象的 String[] listFiles()方法:
Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname.
意思很明確,返回實例化File時,傳入的抽象字元串類型的路徑名稱,此方法返回此路徑下的所有文件及目錄,含抽象路徑.
一般調用System.out.println(Object obj);這個方法,查看Api文檔,
System.out返回一個標準的PrintWriter,此PrintWriter是OutputStream的子類,當調用println()方法輸出對象時,調用的是對象的toString()方法,如果對象沒有覆寫toString()方法,則直接輸出對象的堆內存地址。
查看API文檔,File類的toString()
Returns the pathname string of this abstract pathname
意即返回實例化File對象時候傳入的抽象路徑
你的test方法,實例化File對象的時候,用的是list()方法得到的,此時本身該抽象路徑就只含有文件名而沒有路徑了,另外一個方法則是用的是listFiles()方法,此時得到的都含有抽象路徑。因此你輸出的時候,就出現這種情況.
㈣ java怎麼查詢指定路徑下所有文件夾
Java程序中讀取某個目錄下的所有文件(下面以D盤下的文件夾為例),代碼如下:
import java.io.File;
public class Test1 {
public static void main(String[] args) {
String path="D://";
File file=new File(path);
File[] tempList = file.listFiles();
System.out.println("該目錄下對象個數:"+tempList.length);
for (int i = 0; i < tempList.length; i++) {
if (tempList[i].isFile()) {
//讀取某個文件夾下的所有文件
System.out.println("文件:"+tempList[i]);
}
if (tempList[i].isDirectory()) {
//讀取某個文件夾下的所有文件夾
System.out.println("文件夾:"+tempList[i]);
}
}
}
}
㈤ java怎麼通過文件的路徑讀取文件
packagefile.system.demo.exception;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.util.Scanner;
publicclassReadFile{
publicstaticStringgetFile(Stringrealpath){
Scannerscanner=null;
Stringtext="";
try{
Filefile=newFile(realpath);
scanner=newScanner(file);
}catch(FileNotFoundExceptione){
e.printStackTrace();
}
if(scanner!=null){
while(scanner.hasNextLine()){
text+=scanner.nextLine();
}
scanner.close();
}
//System.out.println(text);
returntext;
}
staticclassInnerTest{
publicstaticvoidmain(String[]args){
Stringrealpath="D:\test.txt";
Stringtext=getFile(realpath);
System.out.println(text);
}
}
}
實現方式有很多,還可以用位元組流FileInputStream,字元流FileReader等方式讀取
㈥ Java中怎樣根據文件的路徑去判斷該文件夾中是否存在該文件
1. 首先明確一點的是:test.txt文件可以和test文件夾同時存在同一目錄下;test文件不能和test文件夾同時存在同一目錄下。
原因是:
(1)win的文件和文件夾都是以節點形式存放,這就意味著相同的文件和文件名不能處在同一目錄下,會命名沖突。
(2)文件後綴名也算是文件名的一部分,即test.txt文件和test文件不是相同文件名的文件。
2. 基於以上原因,如果我想在d:創建一個test文件夾,但是d:下面有一個test文件,那麼由於命名沖突,是不可能創建成功的。
所以,在創建之前,要通過file.exists()判斷是否存在test命名的文件或者文件夾,如果返回true,是不能創建的;
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File file = new File("d:\test_file.txt");
Main.judeFileExists(file);
File dir = new File("d:\test_dir");
Main.judeDirExists(dir);
}// 判斷文件是否存在
public static void judeFileExists(File file) {
if (file.exists()) {
System.out.println("file exists");
} else {
System.out.println("file not exists, create it ...");
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} // 判斷文件夾是否存在
public static void judeDirExists(File file) {
if (file.exists()) {
if (file.isDirectory()) {
System.out.println("dir exists");
} else {
System.out.println("the same name file exists, can not create dir");
} }
else { System.out.println("dir not exists, create it ...");
file.mkdir();
}
}
}
然後再通過file.isDirectory()來判斷這是不是一個文件夾。
㈦ java 如何在指定文件夾下查找文件
Windows下JAVA環境變數的設置祥解
Windows下JAVA用到的環境變數主要有3個,JAVA_HOME、CLASSPATH、PATH。下面逐個分析。
JAVA_HOME指向的是JDK的安裝路徑,如x:\JDK_1.4.2,在這路徑下你應該能夠找到bin、lib等目錄。值得一提的是,JDK的安裝路徑可以選擇任意磁碟目錄,不過建議你放的目錄層次淺一點,如果你放的目錄很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
那麼,下面的步驟和以後的應用你都要受累了,呵呵。設置方法:
JAVA_HOME=x:\JDK_1.4.2
PATH環境變數原來Windows裡面就有,你只需修改一下,使他指向JDK的bin目錄,這樣你在控制台下面編譯、執行程序時就不需要再鍵入一大串路徑了。設置方法是保留原來的PATH的內容,並在其中加上%JAVA_HOME%\bin
(注,如果你對DOS批處理不了解,你可能不明白%%引起來的內容是什麼意思;其實這里是引用上一步設定好的環境變數JAVA_HOME,你寫成x:\JDK_1.4.2也是可以的;你可以打開一個控制台窗口,輸入echo
%JAVA_HOME%來看一下你的設置結果) :
PATH=%JAVA_HOME%\bin;%PATH%
同樣,%PATH%是引用以前你設置的PATH環境變數,你照抄以前的值就行了。
CLASSPATH環境變數我放在最後面,是因為以後你出現的莫名其妙的怪問題80%以上都可能是由於CLASSPATH設置不對引起的,所以要加倍小心才行。
CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的".\;",如果你看不清,我給你念念——句點反斜杠分號。這個是告訴JDK,搜索CLASS時先查找當前目錄的CLASS文件——為什麼這樣搞,這是由於LINUX的安全機制引起的,LINUX用戶很明白,WINDOWS用戶就很難理解(因為WINDOWS默認的搜索順序是先搜索當前目錄的,再搜索系統目錄的,再搜索PATH環境變數設定的)
,所以如果喜歡盤根究底的朋友不妨研究一下LINUX。
為什麼CLASSPATH後面指定了tools.jar這個具體文件?不指定行不行?顯然不行,行的話我還能這么羅索嘛!:)
這個是由java語言的import機制和jar機制決定的,你可以查資料解決。
呵呵,具體的設定方法: win2k\xp用戶右鍵點擊我的電腦->屬性->高級->環境變數,修改下面系統變數那個框里的值就行了。
win9x用戶修改autoexec.bat文件,在其末尾加入:
set JAVA_HOME=x:\JDK_1.4.2
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
㈧ java中如何在某一路徑下查找文件
這是我在jdk5.0的api里找的
listFiles
public File[] listFiles()返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名所表示目錄中的文件。
如果此抽象路徑名並不表示一個目錄,則此方法將返回 null。否則,為目錄中的每個文件或目錄返回一個 File 對象數組。表示目錄本身及其父目錄的路徑名不包括在結果中。得到的每個抽象路徑名都是根據此抽象路徑名,使用 File(File, String) 構造方法構造。所以,如果此路徑名是絕對路徑名,則得到的每個路徑名都是絕對路徑名;如果此路徑名是相對路徑名,則得到的每個路徑名都是相對於同一目錄的路徑名。
不保證所得數組中的相同字元串將以特定順序出現,特別是不保證它們按字母順序出現。
返回:
表示此抽象路徑名所表示目錄中的文件和目錄的抽象路徑名數組。如果目錄為空,則數組也將為空。如果抽象路徑名不表示一個目錄,或者發生 I/O 錯誤,則返回 null。
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒絕對目錄進行讀取訪問