java 디렉터리 파일 목록 표시 및 디렉터리 삭제 기능
5707 단어 java디렉토리 파일 목록디렉터리 삭제
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
4.1 예 1: 전체 디렉토리의 파일을 나열합니다(귀속).생각:
1. 디렉터리 d:\a를 반복합니다.
2. d:\a에 있는 디렉터리마다 이 하위 디렉터리를 디렉터리로 디렉터리합니다.따라서 모든 원소가 디렉터리인지 아닌지를 판단해야 한다.
다음은 일반 코드에서 귀속 코드 앞의 일부 코드입니다.
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());
}
}
중복된 코드 부분을 봉인하기 때문에 귀속 방법을 사용하여 코드를 봉인하는 동시에 무한 귀속 문제를 해결한다.최종 코드는 다음과 같습니다.
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());
}
}
}
}
4.2 예 2: 전체 디렉토리의 파일 목록(큐)생각:
1. 주어진 디렉터리를 훑어본다.반복된 디렉터리 이름을 집합에 넣습니다.
2. 집합의 모든 디렉터리 요소를 훑어보고 훑어보는 하위 디렉터리를 집합에 추가하면 마지막에 훑어볼 때마다 하나의 디렉터리를 집합에서 삭제합니다.
3. 이렇게 하면 디렉터리를 발견하면 어떤 디렉터리가 전부 다 지나갈 때까지 다음 동급 디렉터리를 훑어보기 시작한다.
어떤 집합을 사용할지 고려해야 한다.우선 집합 내의 디렉터리 요소는 정렬할 필요가 없고 서로 다른 디렉터리 내의 하위 디렉터리 이름이 중복될 수 있기 때문에 리스트 집합을 set 집합이 아니라 자주 요소를 삭제하기 때문에 arraylist 집합이 아니라linkedlist 집합을 사용합니다. 링크dlist 집합의 가장 두드러진 특성은 FIFO 대기열입니다.
반복 반복에 비해 대기열 반복 디렉터리를 사용하는 장점은 요소가 용기에 놓여 있고 메모리가 넘치기 어렵다는 것이다.
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();
}
}
4.3 예 3: 트리 구조는 전체 디렉토리의 파일을 표시합니다(귀속).생각:
1. 먼저 1 레벨 디렉토리와 파일을 나열합니다.
2. 디렉토리의 경우 트리를 구성하는 접두사 기호를 추가합니다.그리고 이 디렉터리를 다시 훑어보십시오. 이곳은 차례로 훑어보셔야 합니다.
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());
}
}
}
}
결과는 다음과 같습니다.
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
4.4 전체 디렉토리 삭제
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();
}
}
총결산상기에서 말한 것은 여러분이 소개해 드린 자바 디스플레이 디렉터리 파일 목록과 디렉터리 삭제입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 답장할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.