File
. คุณสามารถอ่านเกี่ยวกับงานของเขาได้ที่นี่ แต่ใน Java 7 ผู้สร้างภาษาได้ตัดสินใจเปลี่ยนวิธีการทำงานกับไฟล์และไดเร็กทอรี นี่เป็นเพราะความจริงที่ว่าชั้นเรียนFile
มีข้อเสียหลายประการ ตัวอย่างเช่น ไม่มีวิธีการcopy()
ที่จะช่วยให้คุณสามารถคัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่งได้ (คุณลักษณะที่ดูเหมือนจำเป็นอย่างชัดเจน) นอกจากนี้ คลาสFile
ยังมีเมธอดจำนวนมากที่คืนboolean
ค่า -value หากเกิดข้อผิดพลาด วิธีการดังกล่าวจะส่งกลับค่าเท็จแทนที่จะส่งข้อยกเว้น ซึ่งทำให้การวินิจฉัยข้อผิดพลาดและการระบุสาเหตุทำได้ยากมาก แทนที่จะเป็นคลาสเดียวFile
มีมากถึง 3 คลาสปรากฏขึ้น: Paths
, Path
และFiles
. ถ้าให้พูดให้ชัดเจนPath
นี่คืออินเทอร์เฟซ ไม่ใช่คลาส เรามาดูกันว่าพวกเขาแตกต่างกันอย่างไรและเหตุใดจึงจำเป็นต้องมีแต่ละอัน เริ่มจากสิ่งที่ง่ายที่สุดกันดีกว่า - Paths
.
เส้นทาง
Paths
เป็นคลาสที่เรียบง่ายมากโดยใช้วิธีคงที่เพียงวิธีget()
เดียว มันถูกสร้างขึ้นเพื่อรับวัตถุประเภทจากสตริงที่ส่งผ่านหรือ URI Path
เท่านั้น มันไม่มีฟังก์ชั่นอื่น ๆ นี่คือตัวอย่างผลงานของเขา:
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt");
}
}
ไม่ใช่วิชาที่ยากที่สุดใช่ไหม? :) เนื่องจากเรามี object ประเภทPath
เรามาดูกันว่ามันคืออะไรPath
และทำไมจึงจำเป็น :)
เส้นทาง
Path
โดยทั่วไปแล้ว เป็นอะนาล็อกที่ออกแบบใหม่ของFile
. มันง่ายกว่ามากในการทำงานมากกว่าFile
ด้วย ประการ แรกวิธีการอรรถประโยชน์ (คงที่) จำนวนมากถูกลบออกจากมันและย้ายไปที่ชั้นเรียน ประการที่สองมีการเรียงลำดับค่าส่งคืนของวิธีการ ในชั้นเรียนวิธีการต่างๆ ส่งคืนสิ่งนี้, นั่น, นั่น- มันไม่ง่ายเลยที่จะเข้าใจ ตัวอย่างเช่น มีวิธีการที่ส่งคืนพาธพาเรนต์สำหรับไฟล์ปัจจุบันเป็นสตริง แต่ในขณะเดียวกันก็มีวิธีที่คืนสิ่งเดียวกัน แต่อยู่ในรูปของวัตถุ! นี่เป็นสิ่งที่ซ้ำซ้อนอย่างชัดเจน ดังนั้นในอินเทอร์เฟซวิธีการและวิธีการอื่นในการทำงานกับไฟล์เพียงแค่ส่งคืนวัตถุ ไม่มีตัวเลือกมากมาย - ทุกอย่างง่ายและเรียบง่าย มันมีวิธีการที่มีประโยชน์อะไรบ้าง? นี่คือบางส่วนและตัวอย่างงานของพวกเขา: Files
Path
File
String
boolean
File
getParent()
getParentFile()
File
Path
getParent()
Path
Path
-
getFileName()
— ส่งคืนชื่อไฟล์จากเส้นทาง; -
getParent()
— ส่งคืนไดเร็กทอรี "พาเรนต์" ที่สัมพันธ์กับพาธปัจจุบัน (นั่นคือ ไดเร็กทอรีที่อยู่สูงกว่าในแผนผังไดเร็กทอรี) -
getRoot()
— ส่งคืนไดเร็กทอรี "root"; นั่นคืออันที่อยู่ด้านบนสุดของแผนผังไดเร็กทอรี -
startsWith()
,endsWith()
— ตรวจสอบว่าเส้นทางเริ่มต้น/สิ้นสุดด้วยเส้นทางที่ผ่านหรือไม่:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); Path fileName = testFilePath.getFileName(); System.out.println(fileName); Path parent = testFilePath.getParent(); System.out.println(parent); Path root = testFilePath.getRoot(); System.out.println(root); boolean endWithTxt = testFilePath.endsWith("Desktop\\testFile.txt"); System.out.println(endWithTxt); boolean startsWithLalala = testFilePath.startsWith("lalalala"); System.out.println(startsWithLalala); } }
เอาต์พุตคอนโซล:
testFile.txt
C:\Users\ชื่อผู้ใช้\Desktop
C:\
true
เท็จให้ความสนใจกับวิธีการ
endsWith()
ทำงาน จะตรวจสอบว่าเส้นทางปัจจุบันสิ้นสุดด้วยเส้นทาง ที่ผ่านไป หรือไม่ มันอยู่บนเส้นทางและไม่ใช่ชุดของตัวละครเปรียบเทียบผลลัพธ์ของการโทรทั้งสองนี้:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath.endsWith("estFile.txt")); System.out.println(testFilePath.endsWith("Desktop\\testFile.txt")); } }
เอาต์พุตคอนโซล:
ผิด
ถูกคุณต้องส่งเส้นทางแบบเต็ม ไปยังเมธอด
endsWith()
ไม่ใช่เพียงชุดอักขระ: ไม่เช่นนั้นผลลัพธ์จะเป็นเท็จ เสมอ แม้ว่าเส้นทางปัจจุบันจะลงท้ายด้วยลำดับอักขระดังกล่าวก็ตาม (เช่นในกรณีของ “estFile.txt ” ในตัวอย่างข้างต้น)นอกจากนี้ยังมี
Path
กลุ่มวิธีการที่ทำให้การทำงานกับเส้นทางสัมบูรณ์ (เต็ม) และเส้นทางสัมพัทธ์ง่ายขึ้น
-
boolean isAbsolute()
— คืนค่าเป็นจริงหากเส้นทางปัจจุบันเป็นแบบสัมบูรณ์:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath = Paths.get("C:\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath.isAbsolute()); } }
เอาต์พุตคอนโซล:
จริง
-
Path normalize()
— “ทำให้ปกติ” เส้นทางปัจจุบัน โดยลบองค์ประกอบที่ไม่จำเป็นออกไป คุณอาจรู้ว่าระบบปฏิบัติการยอดนิยมมักใช้อักขระ “.” เมื่อแสดงถึงเส้นทาง (“ไดเรกทอรีปัจจุบัน”) และ “..” (ไดเรกทอรีหลัก) ตัวอย่างเช่น: “ ./Pictures/dog.jpg ” หมายความว่าในไดเร็กทอรีที่เราอยู่ในตอนนี้มีโฟลเดอร์ Pictures และในนั้นมีไฟล์ “dog.jpg”ดังนั้นนี่คือ หากโปรแกรมของคุณมีเส้นทางที่ใช้ “” หรือ “..” วิธีการ
normalize()
จะลบออกและรับเส้นทางที่ไม่มี:import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path path5 = Paths.get("C:\\Users\\Java\\.\\examples"); System.out.println(path5.normalize()); Path path6 = Paths.get("C:\\Users\\Java\\..\\examples"); System.out.println(path6.normalize()); } }
เอาต์พุตคอนโซล:
C:\Users\Java\examples
C:\Users\examples -
Path relativize()
— คำนวณเส้นทางสัมพัทธ์ระหว่างเส้นทางปัจจุบันและเส้นทางที่ผ่านไปตัวอย่างเช่น:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { Path testFilePath1 = Paths.get("C:\\Users\\Users\\Users\\Users"); Path testFilePath2 = Paths.get("C:\\Users\\Users\\Users\\Users\\Username\\Desktop\\testFile.txt"); System.out.println(testFilePath1.relativize(testFilePath2)); } }
เอาต์พุตคอนโซล:
ชื่อผู้ใช้\เดสก์ท็อป\testFile.txt
Path
มีขนาดค่อนข้างใหญ่ คุณสามารถค้นหาทั้งหมดได้ในเอกสารของ Oracle เราจะดำเนินการตรวจสอบต่อFiles
ไป
ไฟล์
Files
File
- นี่คือคลาสยูทิลิตี้ซึ่งมีการย้ายวิธีการแบบคงที่จากคลาส Files
- สิ่งนี้ประมาณเหมือนกับArrays
หรือCollections
ใช้งานได้กับไฟล์เท่านั้นไม่ใช่กับอาร์เรย์และคอลเลกชัน :) มุ่งเน้นไปที่การจัดการไฟล์และไดเร็กทอรี โดยใช้วิธีการคงที่Files
เราสามารถสร้าง ลบ และย้ายไฟล์และไดเร็กทอรีได้ สำหรับการดำเนินการเหล่า นี้จะใช้วิธีการcreateFile()
(สำหรับไดเร็กทอรี - createDirectory()
) move()
และ delete()
ต่อไปนี้เป็นวิธีการใช้งาน:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class Main {
public static void main(String[] args) throws IOException {
//file creation
Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
System.out.println("Was the file created successfully?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
// create directory
Path testDirectory = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory"));
System.out.println("Was the directory successfully created?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory")));
//move file from desktop to testDirectory. You need to move with the name of the file in the folder!
testFile1 = Files.move(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt"), REPLACE_EXISTING);
System.out.println("Is our file left on the desktop?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
System.out.println("Has our file been moved to testDirectory?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));
//remove file
Files.delete(testFile1);
System.out.println("Does the file still exist?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory\\testFile111.txt")));
}
}
ที่นี่เราสร้างไฟล์ (method Files.createFile()
) บนเดสก์ท็อปก่อน จากนั้นจึงสร้างโฟลเดอร์ที่นั่น (method Files.createDirectory()
) หลังจากนั้นเราจะย้ายไฟล์ (method Files.move()
) จากเดสก์ท็อปไปยังโฟลเดอร์ใหม่นี้ และในตอนท้ายเราจะลบไฟล์ (method Files.delete()
) เอาต์พุตคอนโซล: สร้างไฟล์สำเร็จหรือไม่ true สร้างไดเร็กทอรีสำเร็จหรือไม่? จริง ไฟล์ของเรายังอยู่บนเดสก์ท็อปหรือไม่? false ไฟล์ของเราถูกย้ายไปยัง testDirectory หรือไม่? จริง ไฟล์ยังคงอยู่หรือไม่? เท็จ ใส่ใจ:เช่นเดียวกับวิธีการอินเทอร์เฟซหลายPath
วิธีส่งFiles
คืนอ็อบเจ็กต์ Path
วิธีการเรียนส่วนใหญ่Files
ยังยอมรับPath
. วิธีการจะกลายเป็นผู้ช่วยที่ซื่อสัตย์ของคุณPaths.get()
- ใช้มันอย่างแข็งขัน มีอะไรน่าสนใจอีกบ้างFiles
? สิ่งที่คลาสเก่าขาดจริงๆ คือ ! File
วิธีการ copy()
เราคุยกันถึงเขาตั้งแต่เริ่มบรรยายแล้ว ถึงเวลาพบเขาแล้ว!
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class Main {
public static void main(String[] args) throws IOException {
//file creation
Path testFile1 = Files.createFile(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt"));
System.out.println("Was the file created successfully?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
// create directory
Path testDirectory2 = Files.createDirectory(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2"));
System.out.println("Was the directory successfully created?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2")));
//copy the file from the desktop to the directory testDirectory2.
testFile1 = Files.copy(testFile1, Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt"), REPLACE_EXISTING);
System.out.println("Is our file left on the desktop?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testFile111.txt")));
System.out.println("Has our file been copied to testDirectory?");
System.out.println(Files.exists(Paths.get("C:\\Users\\Username\\Desktop\\testDirectory2\\testFile111.txt")));
}
}
เอาต์พุตคอนโซล: สร้างไฟล์สำเร็จหรือไม่ true สร้างไดเร็กทอรีสำเร็จหรือไม่? จริง ไฟล์ของเรายังอยู่บนเดสก์ท็อปหรือไม่? จริง ไฟล์ของเราถูกคัดลอกไปยัง testDirectory หรือไม่ จริง ตอนนี้คุณสามารถคัดลอกไฟล์โดยทางโปรแกรมได้แล้ว! :) แต่ชั้นเรียนFiles
ช่วยให้คุณไม่เพียง แต่จัดการไฟล์ด้วยตนเอง แต่ยังทำงานกับเนื้อหาด้วย ในการเขียนข้อมูลลงไฟล์ก็มีวิธีการwrite()
และสำหรับการอ่าน - มากถึง 3: read()
และreadAllBytes()
เราreadAllLines()
จะดูรายละเอียดหลังกัน ทำไมมัน? เพราะมีประเภทคืนที่น่าสนใจมาก - List<String>
! นั่นคือมันจะส่งคืนรายการบรรทัดในไฟล์ให้เราทราบ แน่นอนว่าสิ่งนี้ทำให้การทำงานกับเนื้อหาสะดวกมาก เนื่องจากไฟล์ทั้งหมดทีละบรรทัดสามารถส่งออกไปยังคอนโซลในลูปปกติได้for
:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main {
public static void main(String[] args) throws IOException {
List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);
for (String s: lines) {
System.out.println(s);
}
}
}
ผลลัพธ์ของคอนโซล: ฉันจำช่วงเวลาที่ยอดเยี่ยมได้: คุณปรากฏตัวต่อหน้าฉัน ราวกับนิมิตที่หายวับไป ราวกับอัจฉริยะแห่งความงามอันบริสุทธิ์ สบายมาก! :) คุณลักษณะนี้ปรากฏใน Java 7 ใน Java 8 Stream API ปรากฏขึ้น ซึ่งเพิ่มองค์ประกอบบางส่วนของการเขียนโปรแกรมเชิงฟังก์ชันให้กับ Java รวมถึงความสามารถในการจัดการไฟล์ที่สมบูรณ์ยิ่งขึ้น ลองนึกภาพว่าเรามีงาน: ค้นหาบรรทัดทั้งหมดในไฟล์ที่ขึ้นต้นด้วยคำว่า "อย่างไร" แปลงเป็น UPPER CASE และส่งออกไปยังคอนโซล โซลูชันที่ใช้คลาสFiles
ใน Java 7 จะมีลักษณะ อย่างไร บางสิ่งเช่นนี้:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main {
public static void main(String[] args) throws IOException {
List<String> lines = Files.readAllLines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"), UTF_8);
List<String> result = new ArrayList<>();
for (String s: lines) {
if (s.startsWith("How")) {
String upper = s.toUpperCase();
result.add(upper);
}
}
for (String s: result) {
System.out.println(s);
}
}
}
เอาต์พุตคอนโซล: เหมือนวิสัยทัศน์ที่รวดเร็ว เหมือนอัจฉริยะแห่งความงามอันบริสุทธิ์ ดูเหมือนเราจะทำมันสำเร็จแล้ว แต่คุณไม่คิดเหรอว่าสำหรับงานง่ายๆ เช่นนี้ โค้ดของเราจะกลายเป็น... รายละเอียดเล็กๆ น้อยๆ ใช่ไหม? การใช้ Java 8 Stream API โซลูชันดูหรูหรากว่ามาก:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) throws IOException {
Stream<String> stream = Files.lines(Paths.get("C:\\Users\\Username\\Desktop\\pushkin.txt"));
List<String> result = stream
.filter(line -> line.startsWith("How"))
.map(String::toUpperCase)
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
เราได้รับผลลัพธ์เดียวกัน แต่มีโค้ดน้อยกว่ามาก! ยิ่งไปกว่านั้น ไม่สามารถพูดได้ว่าเราสูญเสีย "ความสามารถในการอ่าน" ไป ฉันคิดว่าคุณสามารถแสดงความคิดเห็นได้อย่างง่ายดายว่าโค้ดนี้ทำอะไรได้บ้าง แม้ว่าคุณจะไม่คุ้นเคยกับ Stream API ก็ตาม แต่โดยสรุปสตรีมคือลำดับขององค์ประกอบที่คุณสามารถทำหน้าที่ต่างๆ ได้ เราได้รับออบเจ็กต์ Stream จากเมธอดFiles.lines()
จากนั้นจึงใช้ 3 ฟังก์ชันกับมัน:
-
โดยใช้วิธีการนี้
filter()
เราเลือกเฉพาะบรรทัดจากไฟล์ที่ขึ้นต้นด้วย "How" -
เราผ่านบรรทัดที่เลือกทั้งหมดโดยใช้วิธีการ
map()
และนำแต่ละบรรทัดไปที่ UPPER CASE -
เรารวมบรรทัดผลลัพธ์ทั้งหมดเข้ากับ
List
การใช้collect()
.






Files.walkFileTree()
. นี่คือสิ่งที่เราต้องทำ ก่อนอื่นเราFileVisitor
ต้อง FileVisitor
เป็นอินเทอร์เฟซพิเศษที่อธิบายวิธีการทั้งหมดในการสำรวจแผนผังไฟล์ โดยเฉพาะเราจะใส่ตรรกะเพื่ออ่านเนื้อหาของไฟล์และตรวจสอบว่ามีข้อความที่เราต้องการหรือไม่ หน้าตาของเราจะเป็นดังนี้FileVisitor
:
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.List;
public class MyFileVisitor extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
List<String> lines = Files.readAllLines(file);
for (String s: lines) {
if (s.contains("This is the file we need")) {
System.out.println("Required file found!");
System.out.println(file.toAbsolutePath());
break;
}
}
return FileVisitResult.CONTINUE;
}
}
ในกรณีนี้ คลาสของเราสืบทอดมาจากSimpleFileVisitor
. นี่คือคลาสที่นำไปใช้FileVisitor
ซึ่งคุณต้องแทนที่เพียงวิธีเดียวเท่านั้นvisitFile()
: ที่นี่เราจะอธิบายสิ่งที่ต้องทำกับแต่ละไฟล์ในแต่ละไดเร็กทอรี หากคุณต้องการตรรกะการแวะผ่านที่ซับซ้อนมากขึ้น คุณควรเขียนการใช้งานของคุณFileVisitor
เอง ที่นั่นคุณจะต้องใช้อีก 3 วิธี:
-
preVisitDirectory()
— ตรรกะที่ต้องดำเนินการก่อนเข้าสู่โฟลเดอร์ -
visitFileFailed()
— จะทำอย่างไรถ้าไม่สามารถเข้าไฟล์ได้ (ไม่สามารถเข้าถึงหรือเหตุผลอื่น ๆ ) -
postVisitDirectory()
— ตรรกะที่ต้องดำเนินการหลังจากเข้าสู่โฟลเดอร์
SimpleFileVisitor
เรา ตรรกะภายในวิธีการนี้visitFile()
ค่อนข้างง่าย: อ่านบรรทัดทั้งหมดจากไฟล์ ตรวจสอบว่ามีเนื้อหาที่เราต้องการหรือไม่ และหากเป็นเช่นนั้น ให้พิมพ์เส้นทางที่แน่นอนไปยังคอนโซล บรรทัดเดียวที่อาจทำให้คุณมีปัญหาคือบรรทัดนี้:
return FileVisitResult.CONTINUE;
ในความเป็นจริงทุกอย่างเป็นเรื่องง่าย ที่นี่เราเพียงแต่อธิบายว่าโปรแกรมควรทำอะไรหลังจากป้อนไฟล์และการดำเนินการที่จำเป็นทั้งหมดเสร็จสิ้นแล้ว ในกรณีของเรา เราจำเป็นต้องสำรวจต้นไม้ต่อไป ดังนั้นเราจึงเลือกตัวCONTINUE
เลือก แต่ตัวอย่างเช่นเราอาจมีหน้าที่อื่น: ค้นหาไฟล์ทั้งหมดที่มี "นี่คือไฟล์ที่เราต้องการ" แต่มีไฟล์ดังกล่าวเพียงไฟล์เดียวเท่านั้น หลังจากนี้จะต้องยุติโปรแกรม ในกรณีนี้ โค้ดของเราจะมีลักษณะเหมือนกันทุกประการ แต่แทนที่จะพัง จะ:
return FileVisitResult.TERMINATE;
เรามารันโค้ดของเราแล้วดูว่ามันใช้งานได้หรือไม่
import java.io.IOException;
import java.nio.file.*;
public class Main {
public static void main(String[] args) throws IOException {
Files.walkFileTree(Paths.get("C:\\Users\\Username\\Desktop\\testFolder"), new MyFileVisitor());
}
}
เอาต์พุตคอนโซล: พบไฟล์ที่ต้องการแล้ว! C:\Users\Username\Desktop\testFolder\FileWeNeed1.txt พบไฟล์ที่ต้องการแล้ว! C:\Users\Username\Desktop\testFolder\level1-a\level2-aa\FileWeNeed2.txt พบไฟล์ที่ต้องการแล้ว! C:\Users\Username\Desktop\testFolder\level1-b\level2-bb\FileWeNeed3.txt เยี่ยมมาก เราทำได้! :) หากคุณต้องการทราบข้อมูลเพิ่มเติมฉันwalkFileTree()
ขอแนะนำบทความนี้ คุณยังสามารถทำงานเล็ก ๆ ให้สำเร็จได้ - แทนที่SimpleFileVisitor
ด้วยงานปกติFileVisitor
ใช้ทั้ง 4 วิธีและสร้างวัตถุประสงค์สำหรับโปรแกรมนี้ ตัวอย่างเช่น คุณสามารถเขียนโปรแกรมที่จะบันทึกการกระทำทั้งหมดของคุณ: แสดงชื่อไฟล์หรือโฟลเดอร์ในคอนโซลก่อน/หลังป้อน นั่นคือทั้งหมด - แล้วพบกันใหม่! :)
GO TO FULL VERSION