Archive

Archive for the ‘Java I/O’ Category

Sao chép thư mục trong Java

Ví dụ sau minh họa việc sao chép một thư mục và tất cả các thư mục con + các files của nó sang một thư mục mới

package quyetdv.java.javaio.directory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyDirectory {
    public static void main(String[] args) {
        File srcFolder = new File("D:\\Test");
        File destFolder = new File("D:\\TestDest");
        // make sure source exists
        if (!srcFolder.exists()) {
            System.out.println("Directory does not exist.");
            System.exit(0);
        } else {
            try {
                copyFolder(srcFolder, destFolder);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(0);
            }
        }
    }
     private static void copyFolder(File src, File dest) throws IOException {
         if (src.isDirectory()) {
             // if directory not exists, create it
             if (!dest.exists()) {
                 dest.mkdir();
                 System.out.println("Directory copied from " + src + " to " + dest);
                 // list all the directory contents
                 String files[] = src.list();
                 for (String file : files) {
                     // construct the src and dest file structure
                     File srcFile = new File(src, file);
                     File destFile = new File(dest, file);
                     // recursive copy
                     copyFolder(srcFile, destFile);
                 }
             }
          } else {
             // if file, then copy it
             // Use bytes stream to support all file types
             InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest);
             byte[] buffer = new byte[1024];
             int length;
             // copy the file content in bytes
             while ((length = in.read(buffer)) > 0) {
                 out.write(buffer, 0, length);
             }
             in.close();
             out.close();
             System.out.println("File copied from " + src + " to " + dest);
         }
     }
}
Advertisements
Categories: Directory

Xóa thư mục trong Java

Để xóa một thư mục, bạn có thể đơn giản sử dụng phương thức File.delete() với điều kiện là thư mục đó phải trống.

Phổ biến hơn là bạn thường phải thực hiện xóa đệ quy trong một thư mục, tức là tất cả các thư mục con và các file phải được xóa hết. Ví dụ sau minh họa việc đó :

package quyetdv.java.javaio.directory;
import java.io.File;
import java.io.IOException;
public class DeleteDirectory {
    private static final String SRC_FOLDER = "D:\\Test";
    public static void main(String[] args) {
        File directory = new File(SRC_FOLDER);
        // make sure directory exists
        if (!directory.exists()) {
             System.out.println("Directory does not exist.");
             System.exit(0);
        } else {
             try {
                 delete(directory);
             } catch (Exception e) {
                 e.printStackTrace();
                 System.exit(0);
             }
        }
        System.out.println("Done");
    }
    private static void delete(File file) throws IOException {
        if (file.isDirectory()) {
           // directory is empty, then delete it
           if (file.list().length == 0) {
               file.delete();
               System.out.println("Directory is deleted : "
                 + file.getAbsolutePath());
           } else {
                // list all the directory contents
                String files[] = file.list();
                for (String temp : files) {
                   // construct the file structure
                   File fileDelete = new File(file, temp);
                   // recursive delete
                   delete(fileDelete);
                }
                // check the directory again, if empty then delete it
                if (file.list().length == 0) {
                    file.delete();
                    System.out.println("Directory is deleted : "
                      + file.getAbsolutePath());
                }
            }
        } else {
            // if file, then delete it
            file.delete();
            System.out.println("File is deleted : " + file.getAbsolutePath());
        }
     }
}

Kết quả :

DeleteDirectory

Categories: Directory

Lấy thông tin dung lượng trống của ổ đĩa trong Java

Từ JDK 1.6, Java cung cấp các hàm để truy xuất thông tin dung lượng trống của phân vùng hoặc ổ đĩa :

– getTotalSpace() : lấy về tổng số dung lượng trống

– getFreeSpace() :  lấy về dung lượng trống thực tế của phân vùng

– getUsableSpace() : lấy về dung lượng trống sẵn có cho JVM tại thời điểm hiện tại ( có thể do giới hạn về cấp độ người dùng hoặc một số hạn chế khác ở cấp độ hệ điều hành, JVM sẽ không có quyền truy cập đầy đủ đến tất cả các không gian trống trong phân vùng )

Ví dụ sau minh họa thông tin dung lượng của phân vùng D:

package quyetdv.java.javaio.file;
import java.io.File;
public class DiskSpaceDetail {
    public static void main(String[] args) {
        File file = new File("d:");
        long totalSpace = file.getTotalSpace();
        long usableSpace = file.getUsableSpace();
        long freeSpace = file.getFreeSpace();
        System.out.println(" === Partition Detail ===");
        System.out.println(" === bytes ===");
        System.out.println("Total size : " + totalSpace + " bytes");
        System.out.println("Space free : " + usableSpace + " bytes");
        System.out.println("Space free : " + freeSpace + " bytes");
        System.out.println(" === mega bytes ===");
        System.out.println("Total size : " + totalSpace / 1024 / 1024 + " mb");
        System.out.println("Space free : " + usableSpace / 1024 / 1024 + " mb");
        System.out.println("Space free : " + freeSpace / 1024 / 1024 + " mb");
    }
}

Kết quả :

SpaceDetail

Categories: File

Chuyển đổi File thành giá trị Hex trong Java

Ví dụ sau minh họa cách sử dụng String formatter(“%02X”) để chuyển đỏi một File thành giá trị Hex

package quyetdv.java.javaio.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
public class FileToHex {
    public static void convertToHex(PrintStream out, File file) throws IOException {
        InputStream is = new FileInputStream(file);
        int bytesCounter = 0;
        int value = 0;
        StringBuilder sbHex = new StringBuilder();
        StringBuilder sbText = new StringBuilder();
        StringBuilder sbResult = new StringBuilder();
        while ((value = is.read()) != -1) {
           // convert to hex value with "X" formatter
           sbHex.append(String.format("%02X ", value));
           // If the chracater is not convertable, just print a dot symbol "."
           if (!Character.isISOControl(value)) {
               sbText.append((char) value);
           } else {
               sbText.append(".");
        }
        // if 16 bytes are read, reset the counter,
        // clear the StringBuilder for formatting purpose only.
        if (bytesCounter == 15) {
            sbResult.append(sbHex).append(" ").append(sbText).append("\n");
            sbHex.setLength(0);
            sbText.setLength(0);
            bytesCounter = 0;
        } else {
            bytesCounter++;
        }
     }
     // if still got content
     if (bytesCounter != 0) {
        // add spaces more formatting purpose only
        for (; bytesCounter < 16; bytesCounter++) {
            // 1 character 3 spaces
            sbHex.append(" ");
        }
        sbResult.append(sbHex).append(" ").append(sbText).append("\n");
     }
     out.print(sbResult);
     is.close();
   }
   public static void main(String[] args) throws IOException {
      // display output to console
      convertToHex(System.out, new File("D:\\test.txt"));
      // write the output into a file
      convertToHex(new PrintStream("D:\\test.hex"), new File("D:\\test.txt"));
   }
}

Kết quả:

FileToHex

Categories: File

Chuyển đổi String thành InputStream trong Java

Ví dụ sau minh họa việc chuyển một String thành InputStream và sử dụng BufferedReader để đọc và hiển thị InputStream đã được chuyển đổi.

package quyetdv.java.javaio.file;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StringToInputStream {
    public static void main(String[] args) throws IOException {
        String str = "My name is Quyet!";
        // convert String into InputStream
        InputStream is = new ByteArrayInputStream(str.getBytes());
        // read it with BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
}

 

Categories: File

Chuyển đổi mảng Bytes thành File trong Java

Trong Java có thể sử dụng java.io.FileOutputStream để chuyển đổi một mảng các bytes thành một File.

Ví dụ sau sẽ minh họa việc đọc file “D:\\test.txt”, chuyển nội dung của nó thành một mảng Bytes, và ghi ra một file khác.

package quyetdv.java.javaio.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class ArrayOfBytesToFile {
public static void main(String[] args) {
     FileInputStream fis = null;
     File file = new File("D:\\test.txt");
     byte[] bFile = new byte[(int) file.length()];
     try {
         // convert file into array of bytes
         fis = new FileInputStream(file);
         fis.read(bFile);
         fis.close();
         // convert array of bytes into file
         FileOutputStream fos = new FileOutputStream("D:\\test2.txt");
         fos.write(bFile);
         fos.close();
     } catch (Exception e) {
         e.printStackTrace();
     }
 }
}
Categories: File

Chuyển đổi File thành một mảng Bytes trong Java

Trong Java có thể sử dụng java.io.FileInputStream để chuyển đổi một đối tượng File thành một mảng các bytes.

Ví dụ sau sẽ minh họa cách chuyển đổi file “D:’\\test.txt” thành một mảng bytes và in ra nội dung của nó.

package quyetdv.java.javaio.file;
import java.io.File;
import java.io.FileInputStream;
public class FileToArrayOfBytes {
    public static void main(String[] args) {
        FileInputStream fis = null;
        File file = new File("D:\\test.txt");
        byte[] bFile = new byte[(int) file.length()];
        try {
            // convert file into array of bytes
            fis = new FileInputStream(file);
            fis.read(bFile);
            fis.close();
            for (int i = 0; i < bFile.length; i++) {
                System.out.print((char) bFile[i]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Categories: File