Chú ý: Tất cả câu hỏi của chương này đều mặc định là chạy trên Linux
Câu 1: Cách lấy object Path là gì (chọn 3 đáp án)
A. FileSystems.getDefault().getPath(“a.txt”);
B. new FileSystem().getPath(“a.txt”);
C. Paths.get(“foo”, “a.txt”)
D. Paths.getPath(“a.txt”);
E. new java.io.File(“a.txt”).toPath();
F. new Path(“a.txt”);
Câu 2: method nào sau đây giống với method listFiles của class java.io.File (chọn 1 đáp án)
A. method listFiles() của Path interface
B. method list() của Path interface
C. method find của Path interface
D. method listFiles() của class Files
E. method list() của class Files
F. method find của class Files
Câu 3: Điểm mạnh của NIO.2 so với class java.io.File là gì (chọn 3 đáp án)
A. hỗ trợ xử lý file symbolink
B. có thể lấy dc thời gian cập nhật file
C. NIO.2 có thể thay đổi vị trí hiện tại trong cây thư mục
D. có thể xóa file và thư mục
E. Hỗ trợ làm việc với thuộc tính có sẵn system
F. Có thể hiển thị tất cả file trong thư mục
Câu 4: Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)
1 2 |
Path path1 = Paths.get("/tmp/.././home", "../my.txt"); System.out.println(path1.normalize()); |
A. /tmp/../.\home/../my.txt
B. /tmp/my.txt
C. /my.txt
D. my.txt
E. compile error
Câu 5: Giả sử chương trình sau dc lưu ở /home/miko/pg. Khi compile và chạy kết quả là (chọn 1 đáp án)
1 2 |
Path path1 = Paths.get(".").normalize(); System.out.println(path1.getNameCount()); |
A. 0
B. 1
C. 2
D. 3
E. 4
F. compile error
Câu 6: Điền code vào chỗ trống để in ra màn hình OK (chọn 2 đáp án)
1 2 3 4 5 |
Path path = 「①」; if(Files.isDirectory(path)){ String s = Files.deleteIfExists(path) ? "OK" : "NG"; System.out.println(s); } |
A. Object Path của 1 file bình thường
B. object Path của symbolink
C.. Object Path của thư mục trống
D. Object Path của thư mục có chứa file
E. Object Path của 1 file ko có thật trong hệ thống
Câu 7: Giả sử chương trình được lưu ở /sample. Trong /sample/ có các thư mục /card/clover. Compile và chạy chương trình sau kết quả là gì (chọn 1 đáp án)
1 2 3 4 5 6 |
try { Path path = Paths.get("card/clover"); if(Files.isSameFile(path, Paths.get("/sample/card/clover"))){ System.out.println(path.resolve("bar")); } } catch(java.io.IOException e){} |
A. In ra màn hình card/clover/bar. Không tạo ra thư mục bar
B. in ra màn hình /sample/card/clover/bar. Không tạo ra thư mục bar
C. Tạo ra thư mục bar dưới thư mục clover. In ra màn hình card/clover/bar
D. Tạo ra thư mục bar dưới thư mục clover. In ra màn hình /sample/card/clover/bar
E. Compile error
F. runtime error
Câu 8: Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)
1 2 3 4 |
Path a = Paths.get("/food/../orange.txt"); Path b = Paths.get("./lemon.txt"); System.out.println(a.resolve(b)); System.out.println(b.resolve(a)); |
A. /orange.txt
/lemon.txt
B. /orange.txt/lemon.txt
/orange.txt
C. /food/../orange.txt/./lemon.txt
/food/../orange.txt
D. /food/../orange.txt/./lemon.txt
./lemon.txt/food/../orange.txt
E. compile error
F. runtime error
Câu 9: File something.txt có 1 vài dòng được đặt trong thư mục hiện tại của chương trình sau. Compile và chạy chương trình kết quả là gì (chọn 1 đáp án)
1 2 3 4 5 6 7 |
try { Path p1 = Paths.get("something.txt"); BasicFileAttributes at = Files.readAttributes(p1, BasicFileAttributes.class); if(at.lastModifiedTime().toMillis() > 0 && at.size() > 0){ at.setLastModifiedTime(0); } } catch (java.io.IOException e){} |
A. Dòng số 8 compile error
B. Dòng số 9 compile error
C. Dòng số 10 compile error
D. Runtime error
E. compile success nhưng ko hiện ra gì
Câu 10: Trong thư mục hiện tại của chương trình có file foo.txt. Câu nào đúng khi nói về đoạn code sau (chọn 2 đáp án)
1 2 3 |
Path p1 = Paths.get("foo.txt"); Path p2 = Paths.get("mydata"); Files.move(p1, p2, StandardCopyOption.ATOMIC_MOVE, LinkOption.NOFOLLOW_LINKS); |
A. Nếu thư mục hiện tại ko có thư mục mydata thì sẽ xảy ra runtime error
B. Nếu thư mục hiện tại có thư mục mydata thì sẽ xảy ra runtime error
C. Nếu thư mục hiện tại ko có thư mục mydata thì sẽ đổi tên file foo.txt thành mydata
D. Nếu thư mục hiện tại có thư mục mydata thì sẽ di chuyển file foo.txt vào trong thư mục mydata
E. Nếu foo.txt là symbolink file thì xảy ra runtime error
F. Nếu foo.txt là symbolink file và thư mục hiện tại có thư mục mydata thì sẽ di chuyển file foo.txt vào trong thư mục mydata
Câu 11: Trong thư mục hiện tại của chương trình có thư mục foo. Compile và chạy chương trình sau kết quả là (chọn 1 đáp án)
1 2 3 4 5 6 7 |
6. Path path = Paths.get("./foo"); 7. try{ 8. boolean result = Files.walk(path) 9. .filter(p -> p.isDirectory()) 10. .findFirst().isPresent(); 11. System.out.println(result); 12. } catch (IOException e) { e.printStackTrace(); } |
A. true
B. false
C. Dòng thứ 8 compile error
D. Dòng thứ 9 compile error
E. Dòng thứ 10 compile error
F. runtime error
Câu 12: Thư mục hiện tại của chương trình có /foo/memo.txt Compile và chyaj chương trình sau kết quả là (chọn 1 đáp án)
1 2 3 4 5 6 7 |
6. try{ 7. Path path = Paths.get("./foo/memo.txt"); 8. Files.lines(path) 9. .flatMap(p -> Stream.of(p.split(","))) 10. .map(word -> word.length()) 11. .forEach(System.out::print); 12. } catch (IOException e) { } |
A. Dòng thứ 8 compile error
B. Dòng thứ 9 compile error
C. Dòng thứ 10 compile error
D. Compile success nhưng ko hiện ra gì
E. Compile success và nội dung in ra ko chứa dấu phẩy
F. Compile success và nội dung in ra có chứa dấu phẩy
- Có 3 cách để lấy object Path:
1 2 3 |
FileSystem.getDefault().getPath("a.txt") Paths.get("foo","a.txt") new java.io.File("a.txt").toPath() |
- Trong java.io.File có method listFiles() còn trong NIO2 Class Files có phương thức list
- Lợi ích của dùng NIO thay cho IO là làm tăng hiệu suất của các tác vụ liên quan đến vào ra dữ liệu. Hỗ trợ xử lý gần với hệ điều hành hơn nên có nhiều tính năng hơn ví dụ như xử lý symbol link file, xử lý các thuộc tính phụ thuộc hệ thống, di chuyển vị trí ở cây thư mục trong cùng 1 method.
- Method path1.normalize() loại bỏ bất kì thành phần dư thừa nào trong đó bao gồm cả “.” và “directory/..”
1 2 3 |
/home/./joe/foo /home/sally/../joe/foo đều sẽ thành /home/joe/foo sau khi chạy normalize |
- symbol link file có thể là directory cũng có thể là file
- resolve là method để ghép path nhưng chỉ ghép dc với đường dẫn tương đối. Nếu là đường dẫn tuyệt đối sẽ trả về đường dẫn tuyệt đối đó
1 2 3 4 5 6 |
Path a = Paths.get("/foo/../orange.txt"); Path b = Paths.get("./lemon.txt"); System.out.print(a.resolve(b)); //Kết quả là: /food/../orange.txt/./lemon.txt System.out.print(b.resolve(a)); //Kết quả là: /food/../orange.txt |
- check xem path p có phải là directory hay không File.isDirectory(p)
- StandardCopyOption.ATOMIC_MOVE sẽ chuyển file dưới đạng atomic file của hệ điều hành
- Link.Option.NOFOLLOW_LINK chỉ có tác dụng khi copy file
1 |
Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE, LinkOption.NOFOLLOW_LINKS); |
1 2 |
File f = new File("C:¥¥doc¥¥nu.txt"); File f = new File("C:/doc/nu.txt") |
- Nếu tạo thư mục với đường dẫn có chứa symbolink thì sẽ vừa tạo ra file vật lý và vừa tạo symbolink cho file mới
-
123Files.find(path.getParent(), 10.0, (p) ->Files.isDirectory(p))// Đối số thứ 2 phải là interger chỉ độ sâu khi tìm kiếm//Đối số thứ 3 là BiPredicate phải có 2 đầu vào
- java.nio.file.attribute cung cấp 3 interface BasicFileAttributes, PosixFileAttributes, DosFileAttributes. Hiển thị set thuộc tính của file bằng interface AttributeView.
-
12Path file = Paths.get("/var/tmp.txt");long fileSize = long() Files.getAttribute(file, "size");
- Phương thức list có thể trả về stream<Path>, Phương thức lines có thể trả về Stream<string>
Đáp án:
- A C E
- E
- A C E
- C
- B
- B C
- A
- C
- C
- B C
- D
- E