All Downloads are FREE. Search and download functionalities are using the official Maven repository.

anlavn.file.Raw Maven / Gradle / Ivy

package anlavn.file;
// Make By Bình An || AnLaVN || KatoVN

import anlavn.ui.DownloadPopup;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**Lớp Raw hỗ trợ ghi và đọc chuỗi dữ liệu Thô vào tệp tại vị trí được chỉ định.
 * @author AnLaVN - https://github.com/AnLaVN
 */
public class Raw {
    private String filePath = "RawFile.txt";
    private FileOutputStream fos = null;
    private DataOutputStream dos = null;
    private Raw() { }

    
    /**Mở một tệp thô tại vị trí filePath.
     * @param filePath là vị trí cụ thể của tệp Thô, phần mở rộng tệp tin nên là ".txt".
     */
    public Raw(String filePath) {   
        this.filePath = filePath;  
    }
    
    
    /**Sử dụng phương thức này để lấy vị trí tập tin.
     * @return vị trí của tệp Thô.
     */
    public String getFilePath(){    return this.filePath;   }
    

    /**Sử dụng phương thức này để đóng tệp nếu bạn không muốn ghi hoặc đọc vào đó nữa.
     */
    public void closeFile(){
        try {
            if(fos != null && dos != null){     dos.flush();    dos.close();    fos.close();    }
        }catch (IOException e){
            Log.add("!!! Error try to close file \"" + filePath +"\". !!!\n\tError code: " + e.toString());
            throw new RuntimeException(e);
        }
    }
    
    
    /**Sử dụng phương thức này để ghi chuỗi dữ liệu Thô vào tệp.
     * @param Data là chuỗi dữ liệu cần ghi vào tệp.
     */
    public void writeData(String Data){
        try {
            if(fos == null || dos == null){
                fos = new FileOutputStream(filePath);
                dos = new DataOutputStream(fos);
            }
            dos.write(Data.getBytes()); 
        }catch (IOException e){
            Log.add("!!! Error try to write raw data to file \"" + filePath +"\". !!!\n\tError code: " + e.toString());
            throw new RuntimeException(e);
        }
    }
    
    
    /**Sử dụng phương thức này để đọc dữ liệu chuỗi từ tệp.
     * @return một chuỗi dữ liệu trong tệp, trả về null nếu không có gì.
     */
    public String readData(){
        try{
            FileInputStream fis = new FileInputStream(filePath);
            DataInputStream dis = new DataInputStream(fis);
            String data = new String(dis.readAllBytes());
            dis.close();    fis.close();
            return data;
        }catch(IOException e){
            Log.add("!!! Error try to read raw data from file \"" + filePath +"\". !!!\n\tError code: " + e.toString());
            throw new RuntimeException(e);
        }
    }
    
    
    /**Sử dụng phương thức này để sao chép tập tin vào thư mục chỉ định.
     * @param directory đường dẫn thư mục sẽ chứa tập tin của bạn.
     */
    public void copyTo(String directory){
        copyTo(directory, 8192);
    }
    
    
    /**Sử dụng phương thức này để sao chép tập tin vào thư mục chỉ định.
     * @param directory đường dẫn thư mục sẽ chứa tập tin của bạn.
     * @param bufferNum số lượng bộ đệm byte khi sao chép. Mặc định là 8192.
     */
    public void copyTo(String directory, int bufferNum){
        try(FileInputStream fis = new FileInputStream(filePath)){
            Log.add("Raw - Start collecting information.");
            fos = new FileOutputStream(directory);
            byte[] buffer = new byte[bufferNum];
            int bytesRead = -1;
            long totalBytesRead = 0, fileSize = fis.getChannel().size();
            Log.add("Raw - Collect information successfully:\n\t\tFile name \"" + filePath + "\", total size " + fileSize + " bytes.");
            DownloadPopup dp = new DownloadPopup();
            dp.start("Copy " + filePath + " -> " + directory);
            Log.add("Raw - Start copy file:\n\t\tFile name \"" + filePath + "\", buffer size " + bufferNum + " bytes.");
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
                totalBytesRead += bytesRead;
                dp.setContent(totalBytesRead + " / " + fileSize + " bytes");
                dp.setValue((int) (totalBytesRead * 100 / fileSize));
            }
            dp.stop();
            Log.add("Raw - Copy file successfully:\n\t\tFile name \"" + filePath + "\" to \"" + directory + "\" directory.");
            fis.close();
            closeFile();
        } catch(IOException e){
            Log.add("!!! Error try to copy file \"" + filePath +"\" to \"" + directory + "\" directory. !!!\n\tError code: " + e.toString());
            throw new RuntimeException(e);
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy