⑴ java中打開文件目錄的遞歸並實現文件目錄分層顯示,紀錄實時進度
試試這個代碼。
importjava.io.File;
importjava.text.DecimalFormat;
importjava.text.SimpleDateFormat;
importjava.util.Date;
{
publicFilesAndDirectories(){
}
publicvoidrunTest(){
//listfilesandfolders
Stringdir="D:\temp";
Filefile=newFile(dir);
displayInfo(0,file);
}
privatevoiddisplayInfo(intdepth,Filefile){
//Name,Date,Size,Attr
booleanexecutable=file.canExecute();
booleanreadable=file.canRead();
booleanwritable=file.canWrite();
booleanhidden=file.isHidden();
booleandirectory=file.isDirectory();
longlastModified=file.lastModified();
longlength=file.length();
Stringname=file.getName();
//createASCIIfilestructure
StringBuilderbuf=newStringBuilder();
for(inti=0;i<depth;++i){
buf.append("|");
}
if(directory){
buf.append("+");
}
if(name.isEmpty()){
buf.append(".");
}else{
buf.append(name);
}
//addmodificationdate
buf.append(" ");
Datedate=newDate(lastModified);
buf.append(newSimpleDateFormat().format(date));
buf.append(" ");
//addfilesizeinkilobytes
longkb=length/1024;
DecimalFormatformat=newDecimalFormat();
format.setGroupingUsed(true);
buf.append(format.format(kb));
buf.append("KB");
//addread,write,executeattributeflags
buf.append(" ");
if(hidden)
buf.append(".");
if(readable)
buf.append("R");
if(writable)
buf.append("W");
if(executable)
buf.append("X");
//
System.out.println(buf.toString());
File[]children=file.listFiles();
if(children!=null){
for(Filechild:children){
displayInfo(depth+1,child);
}
}
}
publicstaticvoidmain(String[]args){
newFilesAndDirectories().runTest();
}
}
⑵ 使用java遞歸方法遍歷指定目錄下所有子目錄和子文件
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 讀取目錄及子目錄下指定文件名的路徑 並放到一個數組裡面返回遍歷
* @author zdz8207
*
*/
public class FileViewer {
public static void main(String[] args) {
//List arrayList = FileViewer.getListFiles("d:/com","html",true);
//讀取d:/com下的以java 結尾的文件 如有子目錄,包含之(後綴名為null則為所有文件)
//List arrayList = FileViewer.getListFiles("d:/com","java",true);
//經試驗,後綴不能不填寫,否則編譯不通過,提示「FileViewer.java:17: 非法的表達式開始」。
//另外後綴為""時的情況需要 增加到IF 里去,否則 後綴為""時,不會顯示所有文件
List arrayList = FileViewer.getListFiles("d:/com","",true);
if(arrayList.isEmpty())
{
System.out.println("沒有符號要求的文件");
}
else
{
String message = "";
message += "符號要求的文件數:" + arrayList.size() + "\r\n";
System.out.println(message);
for (Iterator i = arrayList.iterator(); i.hasNext();)
{
String temp = (String) i.next();
System.out.println(temp);
message += temp + "\r\n";
}
//將顯示的文件路徑寫到指定的文件里,若文件不存在,則提示IO異常
//java.io.FileNotFoundException: d:\ajax\menu.txt (系統找不到指定的路徑。)
//如果 加個文件是否存在的判斷,如不存在就在當前目錄新建一個,則更好。
appendMethod("d:/menu.txt",message);
}
}
public static List<String> fileList = new ArrayList<String>();
/**
*
* @param path 文件路徑
* @param suffix 後綴名
* @param isdepth 是否遍歷子目錄
* @return
*/
public static List getListFiles(String path, String suffix, boolean isdepth)
{
File file = new File(path);
return FileViewer.listFile(file ,suffix, isdepth);
}
public static List listFile(File f, String suffix, boolean isdepth)
{
//是目錄,同時需要遍歷子目錄
if (f.isDirectory() && isdepth == true)
{
File[] t = f.listFiles();
for (int i = 0; i < t.length; i++)
{
listFile(t[i], suffix, isdepth);
}
}
else
{
String filePath = f.getAbsolutePath();
System.out.println("suffix = "+suffix);
if(suffix =="" || suffix == null)
{
//後綴名為null則為所有文件
System.out.println("----------------");
fileList.add(filePath);
}
else
{
int begIndex = filePath.lastIndexOf(".");//最後一個.(即後綴名前面的.)的索引
String tempsuffix = "";
if(begIndex != -1)//防止是文件但卻沒有後綴名結束的文件
{
tempsuffix = filePath.substring(begIndex + 1, filePath.length());
}
if(tempsuffix.equals(suffix))
{
fileList.add(filePath);
}
System.out.println("|||||||||||||||||||");
}
}
return fileList;
}
/**
* 方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethod(String fileName, String content)
{
try
{
//打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content + "\r\n");
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
⑶ java遞歸列印目錄結構:如圖,為什麼把level+1換成++level就不行了
level = 0,假設同一個目錄有三個文件夾,原本level+1的話,這三個文件列印時傳入的level是1
每遍歷一個文件都+1
⑷ 怎麼寫 java 遞歸解決刪除文件夾以及子文件
import java.util.Scanner;
import java.io.*;
public class Del {
/**
* @刪除文件或文件夾 chsNight
*/
public static String adders;
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
System.out.print("請輸入要刪除的文件地址:");
adders = input.next();
System.out.print("確定刪除?(Y/N):");
String sfdel = input.next();
while (sfdel.equalsIgnoreCase("y")) {
del(adders);
break;
}
}
private static void del(String adders) {
File file = new File(adders);
if (file.isFile() == true) { // 如果是文件,直接刪除
file.delete();
jg();
} else if (file.isDirectory() == true) { // 如果是文件夾
if (file.listFiles().length == 0) { // 如果是空文件夾
file.delete();
jg();
} else {
int zfiles = file.listFiles().length; // 子文件數量
File[] delfile = file.listFiles(); // 子文件路徑
for (int i = 0; i < zfiles; i++) {
if (delfile[i].isDirectory()) {
del(delfile[i].getAbsolutePath()); // 遞歸調用del方法並取得子目錄路徑
}
System.out.println(delfile[i]);
delfile[i].delete();
}
file.delete();
jg();
}
} else {
System.out.println("刪除失敗:不存在該對象!");
}
}
public static void jg() {
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("\n" + adders + "刪除成功!");
}
}
⑸ java 遞歸遍歷文件夾
在main方法中填寫要遍歷的文件夾,就可以刪除文件夾中的文件名以bmp和jpg結尾的文件。這個方法使用了遞歸思想
import java.io.*;
class FileTest
{
public static int cc=0;
public static void Sereach(File f)
{
if(f.isFile())
{
String str=f.getName().substring(f.getName().length()-4);
if(str.equals(".bmp")||str.equals(".jpg")||str.equals(".BMP")||str.equals(".JPG"))
{
f.delete();
System.out.println("刪除"+f.getName());
cc++;
}
}
if(f.isDirectory())
{
File []ss=f.listFiles();
for(int i=0;i<ss.length;i++)
{
Sereach(ss[i]);
}
}
}
public static void main(String []args) throws Exception
{
File f=new File("D:\\picture");
Sereach(f);
System.out.println("一共刪除了"+cc+"張bmp或jpg格式的圖片");
}
}
⑹ JAVA遍歷一個文件夾中的所有文件---(遞歸)
public void traverseFolder2(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("文件夾是空的!");
return;
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
System.out.println("文件夾:" + file2.getAbsolutePath());
traverseFolder2(file2.getAbsolutePath());
} else {
System.out.println("文件:" + file2.getAbsolutePath());
}
}
}
} else {
System.out.println("文件不存在!");
}
}
(6)java遞歸目錄文件擴展閱讀
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);
foldeNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
fileNum++;
}
}
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);
folderNum++;
} else {
System.out.println("文件:" + file2.getAbsolutePath());
fileNum++;
}
}
}
} else {
System.out.println("文件不存在!");
}
System.out.println("文件夾共有:" + folderNum + ",文件共有:" + fileNum);
}
⑺ java 如何遞歸遍歷一個文件夾下的所有文件
代碼如下:
importjava.io.File;
publicclassApp{
staticvoidlist(Stringpath){
Filedir=newFile(path);
File[]files=dir.listFiles();
if(files!=null&&files.length>0){
for(Filefile:files){
if(file.isFile()){
System.out.println(file.getAbsolutePath());
}elseif(file.isDirectory()){
list(file.getPath());
}
}
}
}
publicstaticvoidmain(String[]args){
list("D:\temp");
}
}
⑻ 如何用Java遍歷一個網路目錄下的所有文件
java中可以通過遞歸的方式獲取指定路徑下的所有文件並將其放入List集合中。 假設指定路徑為path,目標集合為fileList,遍歷指定路徑下的所有文件,如果是目錄文件則遞歸調用
⑼ Java遞歸法讀取文件目錄
importjava.io.File;
publicclass${
publicstaticvoidmain(String[]args){
Stringpath="D:/";
test(path);
}
privatestaticvoidtest(Stringpath){
Filef=newFile(path);
File[]fs=f.listFiles();
if(fs==null){
return;
}
for(Filefile:fs){
if(file.isFile()){
System.out.println(file.getPath());
}else{
test(file.getPath());
}
}
}
}
⑽ 如何在指定目錄下遞歸查找java類文件
在進行J2EE應用開發過程中,尤其是反編譯現有java位元組碼文件來學習和研究過程中,經常會遇到編譯時找不到所引用的類,編譯器報錯的問題。而該類定義可能已經存在某個目錄或jar文件中,所以只要找到.class文件路徑將其import進去或把jar文件加入 classpath中,問題也就得到解決。
通常,包含類定義的是.class文件和.jar文件。因此,在目錄下遞歸判斷每個文件,如果是.class文件,則比較文件名和要查找的類名是否一致;如果是.jar文件,則生成一個JarFile對象,並依次判斷JarFile的JarEntry是否為要查找的類,並循環判斷JarFile的所有entries對象名稱是否和要查找的類名一致,如果一致,則說明該jar文件包含有要查找的類。下面的代碼是筆者在項目開發過程中,用於解決實際問題且非常實用的程序。
(此文為文章摘要)