Mã hóa toàn bộ file trong máy tính java năm 2024

Đây là các cách cơ bản để vào ra file trong java. Thông thường chúng ta vẫn vào ra 1 file nhưng vấn đề bây giờ là :

Show

“Chúng ta phải xử lý rất nhiều file khoảng trên 500 file 🙂 mà cách xử lý giống nhau thì phải làm thế nào?”

Cách 1:

Cách này chúng ta sẽ chơi kiểu TRÂU BÒ 🙂 tức là chúng ta sẽ viết chương trình xử lý cho 1 file và sau đó sẽ cho nhập tên file vào xử lý và cứ “copy tên file rồi paste copy rồi paste…” khoảng 500 lần 🙂

Ưu điểm: rất dễ cài đặt.

Nhược điểm : quá trâu bò nếu với số lượng file lớn :))

Cách 2:

Ý tưởng chúng ta sẽ yêu cầu người sử dụng chuyển hết tất cả các tên file thành 1 dạng theo kiểu “fileinput-1” sau đó tăng dần số lên đến hết. Và chương trình chúng ta sẽ dùng xử lý string java để tương tác tới từng file.

Ưu điểm: giảm được công sức so với cách làm trên.

Nhược điểm: mỗi khi càn xử lý đều phải đổi lại tên file -> Mất tên file gốc

Và cả 2 cách trên đều có một nhược điểm chung :

” Các file cần xử lý bắt buộc phải nằm chung thư mục với file chương trình “

Sẽ làm mất thời gian mỗi khi cần xử lý đều phải copy vào nằm chung thư mục với file chương trình xử lý của chúng ta.

Để giải quyết các nhược điểm trên chúng ta sẽ sử dụng : PATH FILE

Path File là đường dẫn tới các file nằm trên máy tính ví dụ: “/home/david/folder”

Vậy ý tưởng sẽ là : chúng ta nhóm tất cả các file cần xử lý vào 1 folder và sẽ sử dụng đường dẫn tới folder đó.

Ưu điểm: Hiệu quả hơn và giải quyết được các nhược điểm của 2 cách làm trên.

Nhược điểm: Cài đặt phức tạp hơn

Cách làm:

Đầu tiên ta sẽ tạo ra 1 file mới với tham số đưa vào hàm khởi tạo file là đường dẫn tới folder cần xử lý :

File pathName = new File("C:\Users\David\Desktop\DavidJohn\IO");

Ở đây có 1 điểm cần chú ý :

  • Đường dẫn tới file trong windows cần phải thêm 1 dấu “\” vào bên cạnh dấu “\” trong đường dẫn tới file. Còn đối với ubuntu hay mac os thì không cần xử lý.

Okay, sau khi đã có file được tạo theo đường path tới folder cần xử lý mục tiêu của chúng ta là cần phải lấy được từng tên của các file nằm trong folder đó ra để xử lý để làm được việc này chúng ta sử dụng hàm “list”

  • Hàm list sẽ trả về một mảng string gồm tên các file và thư mục nằm trong folder xử lý của chúng ta.

Sau khi đã có được mảng tên file cần xử lý việc tiếp theo là chúng ta sẽ tương tác tới từng file nằm trong thư mục đó bằng cách tạo ra 1 file mới và sử dụng hàm khởi tạo có 2 tham số đưa vào là “đường dẫn tới file” và “tên file”.

VD:

File tf = new File(pathName.getPath(), fileNames[i]); (pathName là tên file được khởi tạo bằng đường dẫn tới folder cần xử lý)

Okay sau khi tương tác được vào từng file thì việc xử lý thế nào là tùy mọi người :D. Ở đây mình có slide và 1 đoạn code đơn giản để tham khảo dowload here.

Bây giờ bạn đã biết cách sao chép tệp theo chương trình! :) Tất nhiên,

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

7lớp không chỉ cho phép bạn quản lý tệp mà còn làm việc với nội dung của tệp. Nó có

  
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"));  
   }  
}  

6phương thức ghi dữ liệu vào một tệp và cả 3 phương thức đọc dữ liệu:

  
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"));  
   }  
}  

7,

  
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"));  
   }  
}  

8, và

  
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"));  
   }  
}  

9 Chúng tôi sẽ nói chi tiết về phương thức cuối cùng. Tại sao cái đó? Bởi vì nó có một kiểu trả về rất thú vị:

  
false  
true  

0! Nghĩa là, nó trả về cho chúng ta một danh sách tất cả các dòng trong tệp. Tất nhiên, điều này giúp làm việc với nội dung tệp rất thuận tiện, vì toàn bộ tệp, từng dòng, chẳng hạn, có thể được hiển thị trên bảng điều khiển bằng một vòng lặp thông thường

  
false  
true  

1:

  
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);  
   }  
}  

5

Đầu ra bảng điều khiển:

  
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);  
   }  
}  

6

Siêu tiện lợi! :) Khả năng này xuất hiện trong Java 7. Stream API xuất hiện trong Java 8. Nó bổ sung một số yếu tố lập trình chức năng cho Java. Bao gồm khả năng xử lý tập tin phong phú hơn. Hãy tưởng tượng rằng chúng ta có nhiệm vụ sau: tìm tất cả các dòng bắt đầu bằng từ "As", chuyển đổi chúng thành CHỮ HOA và hiển thị chúng trên bảng điều khiển. Giải pháp sử dụng

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

7lớp trông như thế nào trong Java 7? Một cái gì đó như thế này:

  
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);  
   }  
}  

7

Đầu ra bảng điều khiển:

  
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);  
   }  
}  

8

Nhiệm vụ đã hoàn thành, nhưng bạn có nghĩ rằng đối với một nhiệm vụ đơn giản như vậy, mã của chúng tôi hóa ra lại hơi... dài dòng không? Sử dụng API luồng của Java 8, giải pháp trông thanh lịch hơn nhiều:

  
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);  
   }  
}  

9

Chúng tôi đã đạt được kết quả tương tự, nhưng với ít mã hơn nhiều! Hơn nữa, không ai có thể nói rằng chúng tôi đã mất "khả năng đọc". Tôi nghĩ bạn có thể dễ dàng nhận xét về chức năng của đoạn mã này, ngay cả khi không quen thuộc với Stream API. Nói tóm lại, Luồng là một chuỗi các phần tử, qua đó bạn có thể thực hiện các thao tác khác nhau. Chúng ta lấy một đối tượng Stream từ

  
false  
true  

3phương thức, sau đó áp dụng 3 hàm cho nó:

  1. Chúng tôi sử dụng

    false true

    4phương pháp để chỉ chọn những dòng từ tệp bắt đầu bằng "As".
  2. Chúng tôi duyệt qua tất cả các dòng đã chọn bằng

    false true

    5phương pháp này và chuyển đổi từng dòng thành HOA.
  3. Chúng tôi sử dụng

    false true

    6phương pháp này để tập hợp tất cả các dòng nhận được thành tệp

    false true

    7.

Chúng tôi nhận được cùng một đầu ra:

  
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);  
   }  
}  

8

Bây giờ chúng ta hãy quay trở lại vấn đề chính của chúng ta, đó là các tệp :) Khả năng cuối cùng mà chúng ta sẽ xem xét hôm nay là duyệt qua một cây tệp . Trong các hệ điều hành hiện đại, cấu trúc tệp thường trông giống như một cái cây: nó có gốc và có các nhánh, có thể có các nhánh khác, v.v. Gốc và nhánh là các thư mục. Ví dụ: thư mục " С:// " có thể là thư mục gốc. Nó bao gồm hai nhánh: " C://Downloads " và " C://Users ". Mỗi nhánh này có hai nhánh: " C://Downloads/Pictures ", " C://Downloads/Video ", " C://Users/JohnSmith ", " C://Users/Pudge2005". Và các nhánh này lần lượt có các nhánh khác, v.v. và đây là lý do tại sao chúng ta gọi nó là cây. Trên Linux, cấu trúc tương tự, nhưng thư mục / là thư mục gốc. Bây giờ hãy tưởng tượng rằng chúng ta cần bắt đầu từ thư

Mã hóa toàn bộ file trong máy tính java năm 2024
mục gốc , duyệt qua tất cả các thư mục và thư mục con của nó, đồng thời tìm các tệp có một số nội dung cụ thể. Chúng tôi sẽ tìm kiếm các tệp có dòng "Đây là tệp chúng tôi cần!" Chúng tôi sẽ chọn thư mục "testFolder", nằm trên máy tính để bàn, làm thư mục gốc. Đây là nội dung của nó:
Mã hóa toàn bộ file trong máy tính java năm 2024
Các thư mục cấp 1-a và cấp 1-b cũng chứa các thư mục:
Mã hóa toàn bộ file trong máy tính java năm 2024
Mã hóa toàn bộ file trong máy tính java năm 2024
Không có thư mục nào trong các "thư mục cấp hai" này, chỉ có các tệp riêng lẻ:
Mã hóa toàn bộ file trong máy tính java năm 2024
Mã hóa toàn bộ file trong máy tính java năm 2024
3 tệp có nội dung chúng tôi cần được đặt tên giải thích một cách có chủ ý: FileWeNeed1.txt, FileWeNeed2.txt, FileWeNeed3.txt. Đây chính xác là những tệp chúng ta cần tìm bằng Java. Chung ta se lam như thê nao? Một phương pháp rất hiệu quả để duyệt qua cây tệp sẽ hỗ trợ chúng ta:
  
false  
true  

8. Đây là những gì chúng ta cần làm. Đầu tiên, chúng ta cần một tệp

  
false  
true  

9.

  
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());  
   }  
}  

0là một giao diện đặc biệt, trong đó mô tả các phương pháp duyệt cây tệp. Cụ thể, đó là nơi chúng tôi sẽ đặt logic để đọc nội dung của tệp và kiểm tra xem tệp đó có chứa văn bản chúng tôi cần hay không. Đây là

  
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());  
   }  
}  

0giao diện của chúng tôi:

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

1

Trong trường hợp này, lớp của chúng tôi kế thừa

  
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());  
   }  
}  

2. Đây là một lớp thực hiện

  
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());  
   }  
}  

0, trong đó chúng ta chỉ cần ghi đè lên một phương thức:

  
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());  
   }  
}  

4. Ở đây chúng tôi xác định những gì cần phải được thực hiện với mỗi tệp trong mỗi thư mục. Nếu bạn cần logic phức tạp hơn để duyệt qua cấu trúc tệp, bạn nên viết triển khai

  
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());  
   }  
}  

0. Bạn sẽ cần triển khai thêm 3 phương thức trong lớp đó:

  • 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());  
    
    } }

    6: logic để thực hiện trước khi vào một thư mục;
  • 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());  
    
    } }

    7: logic để thực thi nếu không thể truy cập tệp (không có quyền truy cập hoặc vì lý do khác);
  • 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());  
    
    } }

    8: logic để thực thi sau khi vào một thư mục.

Chúng tôi không cần bất kỳ logic nào như vậy được thực thi, vì vậy chúng tôi ổn với

  
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());  
   }  
}  

9. Logic bên trong

  
true  

0phương thức khá đơn giản: đọc tất cả các dòng trong tệp, kiểm tra xem chúng có chứa nội dung chúng ta cần hay không và nếu có, hãy in đường dẫn tuyệt đối trên bàn điều khiển. Dòng duy nhất có thể gây khó khăn cho bạn là dòng này:

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

2

Thật ra, điều này rất đơn giản. Ở đây chúng tôi chỉ đơn giản mô tả những gì chương trình sẽ làm sau khi tệp được truy cập và tất cả các hoạt động cần thiết đã được thực hiện. Trong trường hợp của chúng tôi, chúng tôi muốn tiếp tục duyệt qua cây, vì vậy chúng tôi chọn

  
true  

1tùy chọn này. Tuy nhiên, cách khác, chúng ta có thể có một mục tiêu khác: thay vì tìm tất cả các tệp có chứa "Đây là tệp chúng tôi cần", chỉ tìm một tệp như vậy . Sau đó, chương trình sẽ chấm dứt. Trong trường hợp này, mã của chúng ta sẽ trông giống hệt nhau, nhưng thay vì ngắt, sẽ có:

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

3

Chà, hãy chạy mã của chúng ta và xem nó có hoạt động không.

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

4

Đầu ra bảng điều khiển:

  
testFile.txt  
C:\Users\Username\Desktop  
C:\  
true  
false  

5

Xuất sắc! Nó đã làm việc! :) Bạn cũng có thể chấp nhận thử thách nhỏ này: thay thế

  
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());  
   }  
}  

9bằng phương thức thông thường

  
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());  
   }  
}  

0, ghi đè cả 4 phương thức và đưa ra mục đích của riêng bạn cho chương trình. Ví dụ: bạn có thể viết một chương trình ghi lại tất cả các hành động của nó: hiển thị tên của tệp hoặc thư mục trước hoặc sau khi nhập chúng. Đó là tất cả cho bây giờ. Hẹn sớm gặp lại! :)