Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan fungsi memaparkan senarai fail direktori dan memadam direktori dalam java

Bagaimana untuk melaksanakan fungsi memaparkan senarai fail direktori dan memadam direktori dalam java

王林
Lepaskan: 2023-05-10 15:13:06
ke hadapan
1205 orang telah melayarinya

Ambil direktori d:a sebagai contoh Andaikan bahawa struktur dalam direktori D:a adalah seperti berikut:

d:\a
|--a.sql
|--back.log
|--b
| |--e
| | |--1.txt
| | |--2.txt
| | `--3.txt
| `--f
| |--4.txt
| |--5.txt
| `--6.txt
|--c
| |--e
| | |--ace1.txt
| | |--ace2.txt
| | `--ace3.txt
| `--f
| |--4.txt
| |--5.txt
| `--6.txt
`--d
 |--a.java
 |--abc (1).txt
 |--abc (2).txt
 |--abc (3).txt
 |--b.java
 `--c.java
Salin selepas log masuk

4.1 Contoh 1: Senaraikan fail dalam keseluruhan direktori (secara rekursif. )

Idea:

1. Melintasi direktori d:a.

2 Setiap kali direktori dalam d:a dilalui, subdirektori ini dilalui. Oleh itu, adalah perlu untuk menentukan sama ada setiap elemen yang dilalui adalah direktori.

Berikut ialah sebahagian daripada kod sebelum beralih daripada kod biasa kepada kod rekursif:

File dir = new File("d:/a");
File[] file_list = dir.listFiles();
for (File list : file_list) {
 if (list.isDirectory()) {
 File dir_1 = list.listFiles(); //此处开始代码重复,且逻辑上可能会无限递归下去
 if (dir_1.isDirectory()) {
  ....
 }
 } else {
 System.out.println(list.getAbsolutePath());
 }
}
Salin selepas log masuk

Untuk merangkum bahagian kod berulang, kaedah rekursif digunakan, yang bukan sahaja merangkum kod, tetapi juga menyelesaikan masalah rekursi tak terhingga. Kod akhir adalah seperti berikut:

import java.io.*;
public class ListAllFiles {
 public static void main(String[] args) {
 File dir = new File("d:/a");
 System.out.println("dir------>"+dir.getAbsolutePath());
 listAll(dir);
 }
 public static void listAll(File dir) {
 File[] file_list = dir.listFiles();
 for (File file : file_list) {
  if (file.isDirectory()) {
  System.out.println("dir------>"+file.getAbsolutePath());
  listAll(file);
  } else {
  System.out.println("file------>"+file.getAbsolutePath());
  }
 }
 }
}
Salin selepas log masuk

4.2 Contoh 2: Senaraikan fail (baris gilir) dalam keseluruhan direktori

Idea:

1 Lintas direktori yang diberikan. Letakkan nama direktori yang dilalui ke dalam koleksi.

2 Lintas setiap elemen direktori dalam koleksi, dan tambahkan subdirektori yang dilalui pada koleksi Akhir sekali, setiap kali traversal tamat, padamkan direktori daripada koleksi.

3. Dengan cara ini, selagi direktori ditemui, ia akan terus dilalui sehingga direktori tertentu dilalui, dan kemudian direktori seterusnya pada tahap yang sama akan dilalui.

Apa yang perlu difikirkan ialah jenis koleksi yang hendak digunakan. Pertama sekali, elemen direktori dalam koleksi tidak perlu diisih, dan nama subdirektori dalam direktori berbeza mungkin diulang, jadi koleksi Senarai digunakan dan bukannya koleksi set Memandangkan elemen kerap ditambah dan dipadam, senarai pautan digunakan bukannya koleksi senarai tatasusunan Ciri yang paling menonjol bagi koleksi senarai terpaut ialah baris gilir FIFO.

Berbanding dengan traversal rekursif, kelebihan menggunakan baris gilir untuk melintasi direktori ialah elemen diletakkan di dalam bekas, semuanya berada dalam ingatan timbunan, dan tidak mudah untuk melimpahi memori.

import java.util.*;
import java.io.*;
public class ListAllFiles2 {
 public static void main(String[] args) {
 File dir = new File("d:/a");
 Queue<File> file_queue = new Queue<File>(); //构建一个队列
 File[] list = dir.listFiles();
 for (File file : list) {  //遍历顶级目录
  if(file.isDirectory()) {
  System.out.println("dir------>"+file.getAbsolutePath());
  file_queue.add(file);
  } else {
  System.out.println("file------>"+file.getAbsolutePath());
  }
 }
 while (!file_queue.isNull()) { //从二级子目录开始,逐层遍历
  File subdirs = file_queue.get(); //先取得二级子目录名称
  File[] subFiles = subdirs.listFiles(); 
  for (File subdir : subFiles) { //遍历每个下一级子目录
  if(subdir.isDirectory()) {
   System.out.println("dir------>"+subdir.getAbsolutePath());
   file_queue.add(subdir); //如果内层还有子目录,添加到队列中
  } else {
   System.out.println("file------>"+subdir.getAbsolutePath());
  }
  }
 }
 }
}

class Queue<E> {
 private LinkedList<E> linkedlist;
 Queue() {
 linkedlist = new LinkedList<E>();
 }
 public void add(E e) {
 linkedlist.addFirst(e); //先进
 }
 public E get() {
 return linkedlist.removeLast(); //先出
 }
 public boolean isNull() {
 return linkedlist.isEmpty();
 }
}
Salin selepas log masuk

4.3 Contoh 3: Struktur pokok memaparkan fail dalam keseluruhan direktori (secara rekursif)

Idea:

1 Senaraikan direktori dan fail peringkat pertama.

2. Jika ia adalah direktori, tambahkan simbol awalan yang membentuk bentuk pokok. Kemudian melintasi direktori ini, yang memerlukan traversal rekursif.

import java.io.*;
public class TreeFiles {
 public static void main(String[] args) {
 File dir = new File("d:/a");
 System.out.println(dir.getName());
 listChilds(dir,1);
 }
 public static void listChilds(File f,int level) {
 String prefix = "";
 for(int i=0;i<level;i++) {
  prefix = "| " + prefix;
 }
 File[] files = f.listFiles();
 for (File file : files) {
  if(file.isDirectory()) {
  System.out.println(prefix + file.getName());
  listChilds(file,level+1);
  } else {
  System.out.println(prefix + file.getName());
  }
 }
 }
}
Salin selepas log masuk

Hasilnya adalah seperti berikut:

a
| a.sql
| b
| | e
| | | 1.txt
| | | 2.txt
| | | 3.txt
| | f
| | | 4.txt
| | | 5.txt
| | | 6.txt
| back.log
| c
| | e
| | | ace1.txt
| | | ace2.txt
| | | ace3.txt
| | f
| | | 4.txt
| | | 5.txt
| | | 6.txt
| d
| | a.java
| | abc (1).txt
| | abc (2).txt
| | abc (3).txt
| | b.java
| | c.java
Salin selepas log masuk

4.4 Padam keseluruhan direktori

import java.io.*;
public class FileDelete {
 public static void main(String[] args) {
 File file = new File("d:/a");
 rm(file);
 }
 public static void rm(File f) {
 if(!f.exists()){
  System.out.println("file not found!");
  return;
 } else if(f.isFile()) {
  f.delete();
  return;
 }
 File[] dir = f.listFiles();
 for(File file : dir) {
  rm(file);
 }
 f.delete();
 }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan fungsi memaparkan senarai fail direktori dan memadam direktori dalam java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan