Archive

Archive for the ‘Java’ Category

[AOP] Link tham khảo (draff)

 

http://fernandocejas.com/2014/08/03/aspect-oriented-programming-in-android/

https://github.com/android10/Android-AOPExample

https://nthoai.blogspot.com/2008/09/su-dung-aop-voi-spring-net.html

https://viblo.asia/ngocanh208/posts/aKYMNjzKM83E

 

Advertisements
Categories: Java

Loại bỏ dấu tiếng Việt trong Java

/**
 * Lop tien ich xu ly ky tu tieng Viet
 * 
 * @author quyetdv
 * 
 */
public class VNCharacterUtils {
    // Mang cac ky tu goc co dau
    private static char[] SOURCE_CHARACTERS = { 'À', 'Á', 'Â', 'Ã', 'È', 'É',
            'Ê', 'Ì', 'Í', 'Ò', 'Ó', 'Ô', 'Õ', 'Ù', 'Ú', 'Ý', 'à', 'á', 'â',
            'ã', 'è', 'é', 'ê', 'ì', 'í', 'ò', 'ó', 'ô', 'õ', 'ù', 'ú', 'ý',
            'Ă', 'ă', 'Đ', 'đ', 'Ĩ', 'ĩ', 'Ũ', 'ũ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ạ',
            'ạ', 'Ả', 'ả', 'Ấ', 'ấ', 'Ầ', 'ầ', 'Ẩ', 'ẩ', 'Ẫ', 'ẫ', 'Ậ', 'ậ',
            'Ắ', 'ắ', 'Ằ', 'ằ', 'Ẳ', 'ẳ', 'Ẵ', 'ẵ', 'Ặ', 'ặ', 'Ẹ', 'ẹ', 'Ẻ',
            'ẻ', 'Ẽ', 'ẽ', 'Ế', 'ế', 'Ề', 'ề', 'Ể', 'ể', 'Ễ', 'ễ', 'Ệ', 'ệ',
            'Ỉ', 'ỉ', 'Ị', 'ị', 'Ọ', 'ọ', 'Ỏ', 'ỏ', 'Ố', 'ố', 'Ồ', 'ồ', 'Ổ',
            'ổ', 'Ỗ', 'ỗ', 'Ộ', 'ộ', 'Ớ', 'ớ', 'Ờ', 'ờ', 'Ở', 'ở', 'Ỡ', 'ỡ',
            'Ợ', 'ợ', 'Ụ', 'ụ', 'Ủ', 'ủ', 'Ứ', 'ứ', 'Ừ', 'ừ', 'Ử', 'ử', 'Ữ',
            'ữ', 'Ự', 'ự', };

    // Mang cac ky tu thay the khong dau
    private static char[] DESTINATION_CHARACTERS = { 'A', 'A', 'A', 'A', 'E',
            'E', 'E', 'I', 'I', 'O', 'O', 'O', 'O', 'U', 'U', 'Y', 'a', 'a',
            'a', 'a', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'o', 'o', 'u', 'u',
            'y', 'A', 'a', 'D', 'd', 'I', 'i', 'U', 'u', 'O', 'o', 'U', 'u',
            'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A',
            'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'A', 'a', 'E', 'e',
            'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E',
            'e', 'I', 'i', 'I', 'i', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o',
            'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O', 'o', 'O',
            'o', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u',
            'U', 'u', 'U', 'u', };

    /**
     * Bo dau 1 ky tu
     * 
     * @param ch
     * @return
     */
    public static char removeAccent(char ch) {
        int index = Arrays.binarySearch(SOURCE_CHARACTERS, ch);
        if (index >= 0) {
            ch = DESTINATION_CHARACTERS[index];
        }
        return ch;
    }

    /**
     * Bo dau 1 chuoi
     * 
     * @param s
     * @return
     */
    public static String removeAccent(String s) {
        StringBuilder sb = new StringBuilder(s);
        for (int i = 0; i < sb.length(); i++) {
            sb.setCharAt(i, removeAccent(sb.charAt(i)));
        }
        return sb.toString();
    }
}

(Tham khảo http://laptrinh.vn/d/3628-chuyen-tieng-viet-co-dau-thanh-khong-dau-trong-java.html)

Categories: Java Basic

Đọc file XML trong Java ( DOM XML Parser )

Bài viết hướng dẫn cách đọc một file XML thông qua DOM XML Parser.

DOM Parser phân tích toàn bộ tài liệu XML và tải nó vào bộ nhớ, sau đó mô hình nó thành cấu trúc cây để dễ dàng di chuyển hoặc thao tác từng node. Trong DOM, mọi thứ trong một tài liệu XML là một node.

Lưu ý : DOM Parser là chậm và tốn nhiều bộ nhớ khi nó tải một tài liệu XML chứa quá nhiều dữ liệu. Sử dụng SAX Parser sẽ nhanh hơn và tốn ít bộ nhớ hơn DOM Parser.

0. File XML mẫu books.xml :

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
   </book>
</catalog>

1. Ví dụ sử dụng DOM XML :

Ví dụ sau sẽ minh họa cách lấy một node bằng “name” và hiển thị “value”

package quyetdv.java.javaxml.dom;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile1 {

    public static void main(String[] args) {
        try {
            File xmlFile = new File("books.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);

            doc.getDocumentElement().normalize();

            System.out.println("Root element : "
                    + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("book");

            System.out.println("-------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node nNode = nList.item(temp);
                System.out
                        .println("\nCurrent Element : " + nNode.getNodeName());
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;

                    System.out.println("Book id : "
                            + eElement.getAttribute("id"));
                    System.out.println("Author : "
                            + eElement.getElementsByTagName("author").item(0)
                                    .getTextContent());
                    System.out.println("Title : "
                            + eElement.getElementsByTagName("title").item(0)
                                    .getTextContent());
                    System.out.println("Genre : "
                            + eElement.getElementsByTagName("genre").item(0)
                                    .getTextContent());
                    System.out.println("Price : "
                            + eElement.getElementsByTagName("price").item(0)
                                    .getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Kết quả :

ReadXMLFile1

2. Lặp qua các Node :

Ví dụ sau sẽ đọc file books.xml và hiển thị cách lặp qua từng node, in ra tên, giá trị của node cũng như attribute nếu có.

package quyetdv.java.javaxml.dom;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile2 {

    public static void main(String[] args) {
        try {
            File xmlFile = new File("books.xml");
            DocumentBuilder dBuilder;

            dBuilder = DocumentBuilderFactory.newInstance()
                    .newDocumentBuilder();

            Document doc = dBuilder.parse(xmlFile);
            System.out.println("Root element : "
                    + doc.getDocumentElement().getNodeName());
            if (doc.hasChildNodes()) {
                printNote(doc.getChildNodes());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void printNote(NodeList nodeList) {
        for (int count = 0; count < nodeList.getLength(); count++) {
            Node tempNode = nodeList.item(count);
            // make sure it's element node.
            if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
                // get node name and value
                System.out.println("\nNode Name = " + tempNode.getNodeName()
                        + " [OPEN]");
                System.out.println("Node Value = " + tempNode.getTextContent());

                if (tempNode.hasAttributes()) {
                    // get attributes names and values
                    NamedNodeMap nodeMap = tempNode.getAttributes();

                    for (int i = 0; i < nodeMap.getLength(); i++) {
                        Node node = nodeMap.item(i);
                        System.out.println("Attr name : " + node.getNodeName());
                        System.out.println("Attr value : "
                                + node.getNodeValue());
                    }
                }
                if (tempNode.hasChildNodes()) {
                    // loop again if has child nodes
                    printNote(tempNode.getChildNodes());
                }
                System.out.println("Node Name = " + tempNode.getNodeName()
                        + " [CLOSE]");
            }
        }
    }

}

Kết quả :

ReadXMLFile2

 

Categories: DOM XML Parser

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