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