Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Làm việc với Text File

Trong bài này, tôi xin giới thiệu với các bạn cách thức làm việc với tập tin dạng văn bản. Nói chung, trong java các khái niệm về nhập xuất đều liên quan đến khái niệm luồng(stream) và căn cứ vào bộ nhớ để quyết định luồng vào hay ra. Có 3  luồng nhập xuất chuẩn đó là:

  • standard output – định nghĩa bởi System.out: luồng xuất
  • standard input – định nghĩa bởiSystem.in: luồng nhập
  • standard error – định nghĩa bởi System.err : luồng xuất lỗi

Và nhớ là khi làm việc với luồng, chúng ta cần phải bẫy lỗi tường minh lỗi IOException(try{…}catch(IOException ex){}).

Đọc file

Để đọc 1 tập tin ta cần luồng đọc tập tin đó là luồng java.io.FileInputStream với đối số đầu vào là đường dẫn đến tập tin cần đọc hoặc đối tượng java.io.File. Sau đó ta cần phải có công cụ để đọc dữ liệu: java.util.Scanner là đối tượng đa năng thường được sử dụng. Ở đây tôi có 1 phương thức đơn giản dùng để đọc 1 file và xuất nội dung ra màn hình như sau

/**
* Phương thức dùng đọc 1 tập tin rồi in ra màn hình
* @param filename: là tập tin cần đọc
*/
void ReadFile(String filename) {
try {
//tạo luồng nối đến tập tin
FileInputStream is=new FileInputStream(filename);
//Dùng phương tiện Scanner để đọc
Scanner input=new Scanner(is,”UTF-8″);//đọc theo bảng mã utf-8
//Đọc tệp tin
int i=1;
//trong khi còn dòng để đọc
while(input.hasNextLine()) {
//Đọc 1 dòng
String line=input.nextLine();
//in ra màn hình
System.out.println((i++)+”. “+line);
}
//đóng luồng
is.close();
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}

Ghi ra file

Để ghi nội dung ra 1 tập tin, ta cần có luồng xuất tập tin, ta sử dụng java.io.FileOutputStream để thực hiện điều này. Chúng ta cần có 1 công cụ ghi ra tập tin, ở đây ta chọn java.io.PrintWriter để ghi, đối tượng này cần tham số đầu vào giống như java.io.FileInputStream.

Sau đây là phương thức dùng để ghi 1 chuỗi ra file

/**
* Phương thức này dùng để ghi dữ liệu vào file
* @param fileName: là file cần ghi
*/
void Write2File(String fileName) throws IOException{
//Tạo luồng xuất
FileOutputStream out=new FileOutputStream(fileName);
//Tạo thiết bị viết
PrintWriter output=new PrintWriter(out,true);//auto flush
//ghi 1 chuỗi ra file
output.println("Nội dung cần lưu xuống file...");
//sau khi làm việc xong, nhớ đóng luồng
out.close();
output.close();
}

174 Responses to “Làm việc với Text File”

  1. tèo said

    Thầy ơi!
    Khi em đọc 1 file ảnh hoặc nhạc thì dùng file.read(buff). Cái này trả về kiểu int vậy em làm sao để chuyển sang kiểu Byte[] hả thầy

  2. vovanhai said

    Trả về kiển int là do khi đọc hết file, giá trị -1 sẽ trả về, còn dữ liệu được lưu trong tham số buff .

  3. sevenlon said

    ban co the hien thi text file bang jtabble
    cho toi 1 vi du di
    cam on

  4. sevenlon said

    Hello hai
    Toi co a text file giong nhu phia duoi
    1 con ca
    2 con cua
    Toi muon hien thi no bang JTable giong nhu sao
    id ho ten
    1 con ca
    2 con cua
    Ban co the cho toi 1 vi du code duoc khong
    Cam on nhieu vi ban da doc thu cua toi

  5. vovanhai said

    Bạn phải lưu file text ở dạng:
    id;họ tên
    1;con cá
    2;con cua
    thì ta sẽ dùng đối tượng StringTokenizer để cắt thành các token.
    hoặc có thể dùng phương thức split của đối tượng String để cắt

    Để hiển thị lên JTable, ta cần có thêm 1 TableModel, giả dử ở đây tôi dùng DefaultTableModel:

    String []header={"id","ho ten"};
    			DefaultTableModel dtm=new DefaultTableModel(header,0);//tiêu đề và 0 dòng
    			JTable tbl=new JTable(dtm);
    
    			FileInputStream fi=new FileInputStream("đường dẫn đến file của bạn");
    			Scanner sc=new Scanner(fi);
    			while(sc.hasNextLine()){
    			  String line=sc.nextLine();
    			   StringTokenizer stz=new  StringTokenizer(line,";");//cắt theo dấu ;
    			   String []row={stz.nextToken(), stz.nextToken()};
    			   //hoặc ta có thể dùng String []rows=line.split(";"); thay cho 2 dòng trên
    			   dtm.addRow(row);
    			}
    			fi.close();
    
    

  6. TieuKim said

    Anh Hải à, em có 3 file mot.txt, hai.txt, ba.txt . Em muốn cộng chúng lại với nhau theo tuần tự như insert chuỗi thứ 2 vào giữa một và ba thì làm thế nào ạ…?

  7. vovanhai said

    Không rõ lắm câu hỏi của bạn. Bạn muốn nối 3 file theo cách chèn nội dung file 2 vào giữa file 1 và file 3 hay đọc từng dòng của file 2 nối vào giữa 1 dòng của file 1 và 3?. Tôi đoán là bạn hỏi theo cách 1. Nếu vậy thì rất đơn giản: bạn đọc nội dung file1, file 2, file 3 ra 3 chuỗi rồi cộng lại.
    FileInputStream fis1=new FileInputStream(“mot.txt”);
    FileInputStream fis2=new FileInputStream(“hai.txt”);
    FileInputStream fis3=new FileInputStream(“ba.txt”);

    String st1=””,st2=””,st3=””;
    Scanner sc1=new Scanner(fs1);
    while(sc.hasNextLine())
    st1+=sc.nextLine();
    tương tự cho file 2, 3

    Kết quả: st=st1+st2+st3;

    Muốn ghi xuống 1 file thì:
    FileOutputStream fos=new FileOutputStream(“tentaptin.txt”);
    PrintWriter out=new PrintWriter(fos,true);
    out.println(st);
    out.close();

  8. VAdaihiep said

    Hay lắm, cảm ơn bác nhé! Cái này là bác tự viết hay lấy ở sách nào vậy?

  9. vovanhai said

    Bạn nghĩ sao mà hỏi vậy?

  10. Nghia said

    Ban oi cho minh hoi:neu ban doc tung dong,ban cu doc tung dong va ghi ra tung dong tuong ung,nhung la doc file word,the nhung file duoc copy lai ko doc duoc.tai sao vay?

  11. Võ Văn Hải said

    Đúng rồi. Header của file word khác. Cách ghi text như chúng ta không áp dụng cho trường hợp này.

  12. nguyen-hieu said

    Chào Thầy! Thầy cho em hỏi, khi em ghi dữ liệu vào file text mà file đó đã tồn tại nội dung sẵn và em muốn ghi tiếp theo vào nội dung của file đó thì em phải làm thế nào? Ở đây em sữ dụng cách ghi là nhập nội dung bằng BufferedReader sau đó lưu nội dung đó vào file text!
    Em cảm ơn Thầy!
    Thân

  13. Vi-Le said

    Chào anh,
    Em đọc được rất nhiều kiến thức bổ ích từ blog của a.Em cảm ơn anh nhiều.
    Sau đây e có vấn đề này nhờ anh hướng dẫn giúp:
    Em có nhiều file .txt, mỗi file có số dòng cố định bằng nhau, mỗi dòng có giá trị là 1 con số. Em muốn đọc giá trị và tính tổng các giá trị trên từng dòng tương ứng của các file. VD: tính tổng tất cả các con số ở dòng 1 của tất cả các file, tính tổng tất cả con số ở dòng 2 của tất cả các file….

    Em cảm ơn anh.

  14. vu tien duc said

    ban nao xem ho minh doan code cua minh o thuc hien dc cau lenh cat chuoi.chay o thay no bao loi j hic…

    try {
    out.println(“”);
    out.println(“”);
    out.println(“Servlet NewServlet”);
    out.println(“”);
    out.println(“”);
    String text = “”;
    String content = “”;

    out.println(“Cut String”);

    out.println(“String “);
    out.println(“”);
    out.println(“”);

    String cut = request.getParameter(“cut”);
    if (cut == null || cut.equalsIgnoreCase(“”)){}

    else
    {
    text = request.getParameter(“text”);
    if (text == null || text.equalsIgnoreCase(“”))
    {
    content = “Please enter string”;
    }
    else {
    String temp[] = text.split(” “);
    Map m = new TreeMap();
    for (int i=0;i<temp.length;i++)
    {
    String s = temp[i].trim();
    if (s!=null && !s.equalsIgnoreCase(""))
    {
    out.println(s);
    out.println("”);
    }else
    {
    m.put(s,new Integer(1));
    }
    }
    }
    }
    out.println(content);
    out.println(“”);
    out.println(“”);
    } finally {
    out.close();

  15. vu tien duc said

    minh dang lap trinh voi servlet bang netbean 6.8 doan code tren la minh dang lam ma o hieu bi loi o dau ma cau lenh cut o thuc hien dc.

  16. Võ Văn Hải said

    Em list các file bằng cách:
    File []files=f.listFiles(); với f là đối tượng File giữ thư mục chứa các file text của bạn.
    sau đó duyệt các file và xử lý.

  17. Phan Vu said

    Anh Hai cho em hoi em muon doc file tu web thi sao anh?
    vd em co url file = “http://www.hvthao.net/course/file.php/7/quotes.txt”

  18. Võ Văn Hải said

    Đoạn code của bạn sẽ như sau:
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.util.Scanner;

    public class ConnectFileViaURL {
    public static void main(String[] args) throws Exception {
    URL vvh = new URL("http://vovanhai.wordpress.com/");

    Scanner sc=new Scanner(new InputStreamReader(vvh.openStream()));
    while(sc.hasNextLine()){
    String line=sc.nextLine();
    System.out.println(line);
    }
    sc.close();
    }

    }

  19. anhvu said

    cho em hoi em muon ghi file test theo dang bang thi phai lam sao vay anh?

  20. anhvu said

    Blog cua anh viec rat hay
    luc truoc em hoc java em khong biet gi het
    tu khi vao blog cua anh em thay kha nang viet java duoc cai thien ro ret
    cam on blog cua anh

  21. Võ Văn Hải said

    không hiểu câu hỏi.

  22. Nguyen said

    Các bạn cho mình hỏi?
    Mình có 1 file txt có tất cả 10 dòng. Mình muốn ghi một chuỗi s vào file đó tại dòng thứ i nào đó thì làm như thế nào vậy ?
    Chân thành cảm ơn.

  23. Võ Văn Hải said

    Giải pháp đơn giản nhất đó là duyệt và ghi các dòng của file ra chuỗi tạm đến dòng thứ i cần chèn tại đó thì thêm dòng cần chèn vào sau đó ghi ngượ lại file.
    Việc kiểm tra số dòng có nằm trong giới hạn,… bạn tự kiểm tra
    Code của nó đây.

    
    package vovanhai.wordpress.com;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    public class InsertLine2File {
    
    	public void InsertAtLine(String filename,int lineNo,String lineInsert)throws Exception{
    		String temp="";//chứa các dòng tạm của file
    		Scanner in=new Scanner(new FileInputStream(filename));
    		int i=0;boolean isChange=false;
    		while(in.hasNextLine()){
    			i++;
    			if(i==lineNo){
    				isChange=true;
    				temp+=lineInsert+"\n";
    			}
    			temp+=in.nextLine()+"\n";
    		}
    		in.close();
    		if(isChange){
    			PrintWriter out=new PrintWriter(new FileOutputStream(filename));
    			out.println(temp);
    			out.close();
    		}
    	}
    	public static void main(String[] args) throws Exception{
    		InsertLine2File x=new InsertLine2File();
    		x.InsertAtLine("c:/temp.txt", 2, "test insert line");
    	}
    }
    
    
  24. Viet Hung said

    chao thay Hai,em dang lam PhD o nuoc ngoai..van ban cua em co 12 cot(chia thanh tung cot),noi dung cot thu 6 tu tren xuong:5556666677788888889999…. em muon danh so lai cot do nhu sau 1112222233344444445555…thi em phai lam sao.lam sao de java hieu phan tu thu 6 cua mot dong nao do Vi du dong 1: line1 [6]?
    chan thanh cam on thay

  25. Viet Hung said

    Thay Hai help em voi :
    Input : 1 file word co 12 cot.Cot thu 6: 5556666677788888889999…
    Out put:in ra file do va danh so lai cot thu 6 nhu sau:1112222233344444445555…
    lam sao de java hieu phan tu thu 6 cua mot dong nao do Vi du dong 1: line1 [6]?
    truly cam on thay

  26. nghia said

    cho em hỏi em muốn làm một đối tượng sinhviên(int id,String tên,String lớp) và lưu xuống đưới dạng file .txt có phần header là id và mỗi id có số byte cố định là 10byte các trường như tên,lớp mỗi trường là 20byte va lúc đọc lên thì dung hàm ji`
    mong anh chỉ giùm

  27. Võ Văn Hải said

    Bạn nói gì thực sự tôi không hiểu: “cột thứ 6 từ trên xuống”??? (tôi thấy có dòng thứ 6 từ trên xuống thôi).
    Còn để java đọc được phần tử thứ 6 trong một dòng, bạn có thể dùng

    line1.charAt(6)
    
  28. Võ Văn Hải said

    Em thử dùng: java.io.ByteArrayOutputStream và java.io.ByteArrayInputStream.

  29. Viet Hung said

    Van ban cua em nhu sau: em mun renumber lai cot thu 6: tu 1 tro di, nhu em da noi o tren, nho thay help

    ATOM 6 CG GLU A 35 -61.937 80.806 2.375 1.00100.92 C
    ATOM 7 CD GLU A 35 -62.391 81.869 1.384 1.00101.36 C
    ATOM 8 OE1 GLU A 35 -63.617 82.110 1.284 1.00101.38 O
    ATOM 9 OE2 GLU A 35 -61.525 82.458 0.697 1.00100.96 O
    ATOM 10 N GLU A 36 -63.631 79.040 6.572 1.00 99.32 N
    ATOM 11 CA GLU A 36 -64.427 79.109 7.800 1.00 98.47 C
    ATOM 12 C GLU A 36 -63.587 78.874 9.054 1.00 97.97 C
    ATOM 13 O GLU A 36 -63.593 79.693 9.977 1.00 97.77 O
    ATOM 14 CB GLU A 36 -65.558 78.073 7.763 1.00 98.60 C
    ATOM 15 CG GLU A 36 -66.474 78.156 6.551 1.00 97.73 C
    ATOM 16 CD GLU A 36 -67.692 77.258 6.699 1.00 97.19 C
    ATOM 17 OE1 GLU A 36 -68.506 77.511 7.613 1.00 96.08 O
    ATOM 18 OE2 GLU A 36 -67.841 76.306 5.904 1.00 97.98 O
    ATOM 19 N ASP A 37 -62.880 77.745 9.086 1.00 97.42 N
    ATOM 20 CA ASP A 37 -62.028 77.382 10.222 1.00 96.54 C
    ATOM 21 C ASP A 37 -60.844 78.341 10.319 1.00 96.48 C
    ATOM 22 O ASP A 37 -60.247 78.516 11.387 1.00

  30. đức said

    Thầy ơi cho em hỏi chút ạ:em muốn nhập vào một file đã có sẵn ví dụ như em để trong ổ E và muốn đếm số lần xuất hiện của các từ trong file phải làm thế nào ạ?

  31. Võ Văn Hải said

    Giả sử dữ liệu mẫu của bạn nằm trong file data.txt. CHương trình sau đây sẽ đọc file đó, renumber theo ý bạn và ghi lại vào file out.txt. Đây là code:

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    public class ReNumber {
    	public static void main(String[] args)throws Exception {
    		Scanner in=new Scanner(new FileInputStream("data.txt"));
    		PrintWriter out=new PrintWriter(new FileOutputStream("out.txt"));
    		int i=1;
    		String text="";
    		while(in.hasNextLine()){
    			String line=in.nextLine();
    			String []row=line.split(" ");
    			row[5]=(i++)+"";
    			for(String x:row)
    				text+=x+" ";
    			text+="\n";
    		}
    		out.println(text);
    		in.close();
    		out.close();
    	}
    }
    

    Kết quả:

    ATOM 6 CG GLU A 1 -61.937 80.806 2.375 1.00100.92 C 
    ATOM 7 CD GLU A 2 -62.391 81.869 1.384 1.00101.36 C 
    ATOM 8 OE1 GLU A 3 -63.617 82.110 1.284 1.00101.38 O 
    ATOM 9 OE2 GLU A 4 -61.525 82.458 0.697 1.00100.96 O 
    ATOM 10 N GLU A 5 -63.631 79.040 6.572 1.00 99.32 N 
    ATOM 11 CA GLU A 6 -64.427 79.109 7.800 1.00 98.47 C 
    ATOM 12 C GLU A 7 -63.587 78.874 9.054 1.00 97.97 C 
    ATOM 13 O GLU A 8 -63.593 79.693 9.977 1.00 97.77 O 
    ATOM 14 CB GLU A 9 -65.558 78.073 7.763 1.00 98.60 C 
    ATOM 15 CG GLU A 10 -66.474 78.156 6.551 1.00 97.73 C 
    ATOM 16 CD GLU A 11 -67.692 77.258 6.699 1.00 97.19 C 
    ATOM 17 OE1 GLU A 12 -68.506 77.511 7.613 1.00 96.08 O 
    ATOM 18 OE2 GLU A 13 -67.841 76.306 5.904 1.00 97.98 O 
    ATOM 19 N ASP A 14 -62.880 77.745 9.086 1.00 97.42 N 
    ATOM 20 CA ASP A 15 -62.028 77.382 10.222 1.00 96.54 C 
    ATOM 21 C ASP A 16 -60.844 78.341 10.319 1.00 96.48 C 
    ATOM 22 O ASP A 17 -60.247 78.516 11.387 1.00 
    

    Chắc là đúng ý bạn?

  32. Võ Văn Hải said

    Bạn tham khảo ở đây rồi cải tiến lại chút là OK:
    http://vovanhai.wordpress.com/java/l%E1%BA%ADp-trinh-java-can-b%E1%BA%A3n/th%E1%BB%91ng-ke-cac-t%E1%BB%AB-trong-m%E1%BB%99t-van-b%E1%BA%A3n/

  33. Viet Hung said

    Chua dung y em,van ban danh so lai nhu sau, va cac cot cua van ban moi la phai thang hang(em can cai file ma cac cot thang hang de dieu dien hinh hoc 3D cua cai file do sau nay ).Output nay cac cot nam dich ra, dich vo.Nho that help em Thanks thay nhieu, co co hoi gap se hau ta thay sau :

    ATOM 6 CG GLU A 1 -61.937 80.806 2.375 1.00100.92 C
    ATOM 7 CD GLU A 1 -62.391 81.869 1.384 1.00101.36 C
    ATOM 8 OE1 GLU A 1 -63.617 82.110 1.284 1.00101.38 O
    ATOM 9 OE2 GLU A 1 -61.525 82.458 0.697 1.00100.96 O
    ATOM 10 N GLU A 2 -63.631 79.040 6.572 1.00 99.32 N
    ATOM 11 CA GLU A 2 -64.427 79.109 7.800 1.00 98.47 C
    ATOM 12 C GLU A 2 -63.587 78.874 9.054 1.00 97.97 C
    ATOM 13 O GLU A 2 -63.593 79.693 9.977 1.00 97.77 O
    ATOM 14 CB GLU A 2 -65.558 78.073 7.763 1.00 98.60 C
    ATOM 15 CG GLU A 2 -66.474 78.156 6.551 1.00 97.73 C
    ATOM 16 CD GLU A 2 -67.692 77.258 6.699 1.00 97.19 C
    ATOM 17 OE1 GLU A 2 -68.506 77.511 7.613 1.00 96.08 O
    ATOM 18 OE2 GLU A 2 -67.841 76.306 5.904 1.00 97.98 O
    ATOM 19 N ASP A 3 -62.880 77.745 9.086 1.00 97.42 N
    ATOM 20 CA ASP A 3 -62.028 77.382 10.222 1.00 96.54 C
    ATOM 21 C ASP A 3 -60.844 78.341 10.319 1.00 96.48 C
    ATOM 22 O ASP A 3 -60.247 78.516 11.387 1.00

  34. Võ Văn Hải said

    Đã fix:
    ReNumber.java

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    public class ReNumber {
    	public static void main(String[] args)throws Exception {
    		Scanner in=new Scanner(new FileInputStream("data.txt"));
    		PrintWriter out=new PrintWriter(new FileOutputStream("out.txt"));
    		int i=1;
    		long cur=99999999999l;
    		String text="";
    		while(in.hasNextLine()){
    			String line=in.nextLine();
    			String []row=line.split(" ");
    
    			int stt=Integer.parseInt(row[5]);
    			if(stt<cur){
    				cur=stt;
    				stt=i;
    			}
    			else if(stt==cur) 
    				stt=i; 
    			else if(stt>cur){
    				cur=stt;
    				i++;
    				stt=i;
    			}
    
    			row[5]=(stt)+"";
    			for(String x:row)
    				text+=x+"\t";
    			text+="\n";
    		}
    		out.print(text);
    		in.close();
    		out.close();
    		System.out.println("Completed");
    	}
    }
    
    

    data.txt

    ATOM 6 CG GLU A 35 -61.937 80.806 2.375 1.00100.92 C
    ATOM 7 CD GLU A 35 -62.391 81.869 1.384 1.00101.36 C
    ATOM 8 OE1 GLU A 35 -63.617 82.110 1.284 1.00101.38 O
    ATOM 9 OE2 GLU A 35 -61.525 82.458 0.697 1.00100.96 O
    ATOM 10 N GLU A 36 -63.631 79.040 6.572 1.00 99.32 N
    ATOM 11 CA GLU A 36 -64.427 79.109 7.800 1.00 98.47 C
    ATOM 12 C GLU A 36 -63.587 78.874 9.054 1.00 97.97 C
    ATOM 13 O GLU A 36 -63.593 79.693 9.977 1.00 97.77 O
    ATOM 14 CB GLU A 36 -65.558 78.073 7.763 1.00 98.60 C
    ATOM 15 CG GLU A 36 -66.474 78.156 6.551 1.00 97.73 C
    ATOM 16 CD GLU A 36 -67.692 77.258 6.699 1.00 97.19 C
    ATOM 17 OE1 GLU A 36 -68.506 77.511 7.613 1.00 96.08 O
    ATOM 18 OE2 GLU A 36 -67.841 76.306 5.904 1.00 97.98 O
    ATOM 19 N ASP A 37 -62.880 77.745 9.086 1.00 97.42 N
    ATOM 20 CA ASP A 37 -62.028 77.382 10.222 1.00 96.54 C
    ATOM 21 C ASP A 37 -60.844 78.341 10.319 1.00 96.48 C
    ATOM 22 O ASP A 37 -60.247 78.516 11.387 1.00
    ATOM 19 N ASP A 38 -62.880 77.745 9.086 1.00 97.42 N
    ATOM 20 CA ASP A 39 -62.028 77.382 10.222 1.00 96.54 C
    ATOM 21 C ASP A 39 -60.844 78.341 10.319 1.00 96.48 C
    ATOM 22 O ASP A 40 -60.247 78.516 11.387 1.00
    

    out.txt

    ATOM	6	CG	GLU	A	1	-61.937	80.806	2.375	1.00100.92	C	
    ATOM	7	CD	GLU	A	1	-62.391	81.869	1.384	1.00101.36	C	
    ATOM	8	OE1	GLU	A	1	-63.617	82.110	1.284	1.00101.38	O	
    ATOM	9	OE2	GLU	A	1	-61.525	82.458	0.697	1.00100.96	O	
    ATOM	10	N	GLU	A	2	-63.631	79.040	6.572	1.00	99.32	N	
    ATOM	11	CA	GLU	A	2	-64.427	79.109	7.800	1.00	98.47	C	
    ATOM	12	C	GLU	A	2	-63.587	78.874	9.054	1.00	97.97	C	
    ATOM	13	O	GLU	A	2	-63.593	79.693	9.977	1.00	97.77	O	
    ATOM	14	CB	GLU	A	2	-65.558	78.073	7.763	1.00	98.60	C	
    ATOM	15	CG	GLU	A	2	-66.474	78.156	6.551	1.00	97.73	C	
    ATOM	16	CD	GLU	A	2	-67.692	77.258	6.699	1.00	97.19	C	
    ATOM	17	OE1	GLU	A	2	-68.506	77.511	7.613	1.00	96.08	O	
    ATOM	18	OE2	GLU	A	2	-67.841	76.306	5.904	1.00	97.98	O	
    ATOM	19	N	ASP	A	3	-62.880	77.745	9.086	1.00	97.42	N	
    ATOM	20	CA	ASP	A	3	-62.028	77.382	10.222	1.00	96.54	C	
    ATOM	21	C	ASP	A	3	-60.844	78.341	10.319	1.00	96.48	C	
    ATOM	22	O	ASP	A	3	-60.247	78.516	11.387	1.00	
    ATOM	19	N	ASP	A	4	-62.880	77.745	9.086	1.00	97.42	N	
    ATOM	20	CA	ASP	A	5	-62.028	77.382	10.222	1.00	96.54	C	
    ATOM	21	C	ASP	A	5	-60.844	78.341	10.319	1.00	96.48	C	
    ATOM	22	O	ASP	A	6	-60.247	78.516	11.387	1.00	
    
    
  35. Viet Hung said

    Scanner in=new Scanner(new FileInputStream(“data.txt”));

    PrintWriter out=new PrintWriter(new FileOutputStream(“out.txt”
    em van chua hieu cu phap: “data,txt” Em phai go duong dan cu the cua file data.txt(c:/Exercise1/data.txt)?file out put “out.txt”tao ra se nam o dau?(overwrite len file data.txt?)

  36. Viet Hung said

    Scanner in=new Scanner(new FileInputStream(“data.txt”));

    PrintWriter out=new PrintWriter(new FileOutputStream(“out.txt”

    khi chay chuong trinh java ko tim thay file data.txt (mac du da co file nay trong thuc muc cua chuong trinh can chay).
    File out.txt tao ra nam o dau ?
    Truly cam on Thay

  37. Võ Văn Hải said

    Em dùng eclipse chạy hay tool khác. Nếu chạy bằng eclipse thì file data phải nằm ngoài cùng của project. Nếu chạy cmd line thì phải để ở cùng thư mục với file class. Hoặc chỉ định dường dẫn trực tiếp sẽ chạy trong mọi trường hợp.

  38. Viet Hung said

    Thua thay,em muon cot thu 2 va 6 sap thang cot theo ky tu cuoi cung, va cot7,8,9 sap thang theo dau . (dau thap phan) thi em lam sao thay.Format co dinh cot thu 2,va 6 la 5 khoang trang?
    Kind regards thay
    ATOM 9 CG GLU A 9 -61.937 80.806 2.375 1.00100.92 C
    ATOM 10 CD GLU A 10 -2.391 81.869 1.384 1.00101.36 C
    ATOM 99 OE1 GLU A 100 -363.617 82.110 1.284 1.00101.38 O
    ATOM 100 OE2 GLU A 9801 -7761.525 82.458 0.697 1.00100.96 O
    ATOM 1125 N GLU A 1112 -7763.631 79.040 6.572 1.00 99.32 N
    ATOM 99999 CA GLU A 9999 -4.427 79.109 7.800 1.00 98.47 C

  39. Viet Hung said

    Thua thay: cai comment em post len cho thay coi ,khong sap duoc theo y cua em:cot thu 2 va 6 em phai sap no thang cot theo ky tu cuoi cung chu khong phai ki tu dau tien . va em phai danh 5 khoang trang cho cot nay(tu o den 99999) ko it hon hay nhieu hon.Cac cot 7,8,9 thang cot theo dau thap phan.Mong thay help em.

  40. Võ Văn Hải said

    bạn fill thêm khoảng trắng vào cho đủ là ok thôi. bạn phải làm thêm chứ.

  41. Võ Văn Hải said

    bèo nhất là làm vầy:

    private String FillBlank(long so){
    	String s="";
    	if(so<10)
    		s="     "+so;
    	else if(so<100)
    		s="    "+so;
    	else if(so<100)
    		s="   "+so;
    	else if(so<100)
    		s="   "+so;
    	else if(so<100)
    		s="  "+so;
    	else if(so<100)
    		s=" "+so;
    	else s=""+so;
    	return s;
    }
    
  42. Viet Hung said

    Y tuong nay cua Thay la hay nhat, tuyet voi nhat roi Thay oi! Em ap dung duoc cho tat ca cac cot con lai luon, ke ca cot thu 2 (ki tu).Cam on Thay rat rat nhieu

  43. Viet Hung said

    Thua thay:E
    String[]row=line.split(” “);chi help trong truong hop cac cot cach nhau 1 khoang trang.Trong truong hop cach nhau nhieu khoang trang thi chuong trinh bao loi vi trong mang row co chua nhung phan tu ” “.Em dung method sau de delete nhung khoang trang trong row nhu sau :
    cach 1:
    public String[] removeBlank(String[] row)
    {For (i=0;i<row.length;i++){If row[i]=" "
    {row[i]=null;}}return row;}
    row1=removeBlank(row);
    cach 2:
    StringTokenizer st = new StringTokenizer(line," ");
    while (st.hasMoreTokens()) {
    String[]row=st.nextToken();}
    ca 2 cach deu khong duoc
    Nho thay help em lan nua!

  44. Võ Văn Hải said

    giả sử s là chuỗi có chứa khoảng trắng thừa. Xóa khoảng trắng thì ta dùng như sau:
    s=s.trim();
    xong.

  45. Viet Hung said

    Ham strim chi help loai bo khoang trang o 2 dau ngoai thoi.Cach tot nhat la lam vay:
    StringTokenizer st = new StringTokenizer(line);
    String [] row = new String[12];
    for ( int j = 0; j < 12; j++ ){
    row[j] = st.nextToken();}Em co mang row nhu y muon ,sau do tiep tuc ap dung cach cua thay de fill blank va hoan thanh. Thanks thay nhieu

  46. trang_tran said

    thầy ơi ,em đang học java căn bản ạ.em muốn hỏi thầy làm thế nào để viết được một chương trình so sánh 2 file văn bản ạ.em cảm ơn thầy.

  47. Nguyễn Phúc Thái said

    Thầy giúp em ti về vấn đề ghi và đọc file :
    Em ghi một chương trình quản lý sinh viên với Gui , em muốn kiểm tra mã số sinh viên nếu trùng,làm cách nào mình lấy được giá trị mã sinh viên trong file test để so sánh và làm sao để đếm được mình đã lưu bao nhiu sinh viên

  48. Võ Văn Hải said

    EM dùng kỹ thuật serialize để lưu 1 danh sách các sinh viên (trong 1 ArrayList). Trong lớp Sinhvien, em override 2 phương thức hashCode và equals dựa trên thuộc tính phân biệt giữa 2 sinhvien. Trong ArrayList em có phương thức contains để kiểm tra 1 đối tượng có tồn tại trong nó không. Còn số lượng sinhvien thì em dùng phương thức size().

  49. Võ Văn Hải said

    EM dùng InputStream và Scanner để đọc từng dòng rồi dùng vòng lặp so sánh từng chữ. Đó là cách dễ nhất, còn nếu dùng các thuật toán cao siêu khác thì em phải đọc thêm.

  50. nguyễn thanh truyễn said

    cho em xin code giải phương trình bậc nhất bằng file txt.
    không xét trường hợp b=0.
    public static void main(String args[])throws IOException
    {
    Scanner sn =new Scanner(System.in);
    int i,a;
    String[] n1=new String[3];
    String[] m=new String[3];
    int[] n=new int[3];
    try
    {
    OutputStreamWriter fout = new OutputStreamWriter
    (new FileOutputStream(“d:\\doc.txt”), “UTF-8″);
    System.out.print(“Nhap vao he so a “);
    n1[0]=sn.nextLine();
    System.out.print(“Nhap vao he so b “);
    n1[1]=” “;
    n1[2]=sn.nextLine();
    try
    {
    for(i=0;i<3;i++)
    fout.write(n1[i]);
    fout.close();
    }
    catch(IOException exc)
    {
    System.out.println("File Error");
    }
    }
    catch(FileNotFoundException exc)
    {
    System.out.println("Error Opening Output File");
    return;
    }

    FileReader fr = new FileReader("D:\\doc.txt");
    BufferedReader br = new BufferedReader(fr);
    String s;
    s=br.readLine();

    for(i=0;i<s.length()-1;i++)
    {
    if((int)s.charAt(i)!=32)
    {
    if ((int)s.charAt(i+1)!=45)
    {
    n[i]=(int)(char)s.charAt(i)+(int)(char)s.charAt(i+1);
    System.out.println("bien s "+s.charAt(i));
    System.out.println("bien n "+n[i]);
    //System.out.print(m[i]);
    i++;
    }
    }
    else
    {
    n[i]=300;
    i++;
    }
    }

    for(i=0;i<3;i++)
    {
    if(m[i]!=null)
    {
    n[i]=Integer.valueOf(m[i]).intValue();
    }
    }
    //n[0]=Integer.valueOf(m[0]).intValue();
    System.out.println((char)n[0]);
    System.out.print(n[1]);
    System.out.print(n[2]);
    }
    em làm sao nhập vào số âm thì bị lỗi và sai em không biết làm sao. anh giúp dùm em!

  51. Võ Văn Hải said

    Đây là code của chương trình giải phương trình bậc 2 với dữ liệu đầu vào lấy từ file, dữ liệu kết quả được đưa ra file.

    
    package vovanhai.wordpress.com;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    public class GiaiPTDataFile {
    
    	public void Giai(String fileName)throws Exception{
    
    		Scanner sc=new Scanner(new FileInputStream(fileName));
    		PrintWriter out=new PrintWriter(new FileOutputStream("results.txt"));
    
    		while(sc.hasNextLine()){
    			try {	
    				String line=sc.nextLine();
    				String []params=line.split(";");
    				int a=Integer.parseInt(params[0]);
    				int b=Integer.parseInt(params[1]);
    				int c=Integer.parseInt(params[2]);
    				String result=GiaiPT(a, b, c);
    				String header=a+"x^2 + "+b+"x + "+c+" = 0 ";
    				out.println(header+result);
    			} catch (Exception e) {
    				out.println(e.getMessage());
    			}
    		}
    		out.close();
    		sc.close();
    	}
    	/**
    	 * Giải phương trình bậc 2. Lưu ý là chỉ giải khi tham số a#0
    	 * @param a tham số a
    	 * @param b tham số b
    	 * @param c tham số c
    	 * @return chuỗi diễn tả kết quả.
    	 */
    	private String GiaiPT(int a, int b,int c){
    		String s="";
    		if(a==0)
    			s= "không phải phương trình bậc 2";
    		else if(b==0)
    			if(c==0)//ax2=0
    				s= "phương trình có nghiệm x=0";
    			else//ax2+c=0
    				if(a*c<0)
    					s= "phương trình có nghiệm x=+-"+Math.sqrt(-c/a);
    				else
    					s= "phương trình vô nghiệm";
    		else
    			if(c==0)//ax2+bx=0
    				s= "phương trình có 2 nghiệm x=0 và x="+(-b/a);
    			else{//ax2+bx+c=0
    				double delta=b*b-4*a*c;
    				if(delta<0)
    					s= "phương trình vô nghiệm";
    				else if(delta==0)
    					s="phương trình có nghiệm kép x="+(-b/(2*a));
    				else{
    					double x1=(-b+Math.sqrt(delta))/(2*a);
    					double x2=(-b-Math.sqrt(delta))/(2*a);
    					s="phương trình có 2 nghiệm phân biệt:" +
    					"x1="+x1+"\tx2="+x2;
    				}
    			}
    		return s;		
    	}
    	public static void main(String[] args) throws Exception{
    		new GiaiPTDataFile().Giai("ptdata.txt");
    	}
    }
    

    Với dữ liệu đầu vào là file ptdata.txt như sau:

    1;-3;2
    1;2;-3
    5;6;7
    0;3;2

    Ta có kết quả trong file results.txt như sau

    1x^2 + -3x + 2 = 0 phương trình có 2 nghiệm phân biệt:x1=2.0	x2=1.0
    1x^2 + 2x + -3 = 0 phương trình có 2 nghiệm phân biệt:x1=1.0	x2=-3.0
    5x^2 + 6x + 7 = 0 phương trình vô nghiệm
    0x^2 + 3x + 2 = 0 không phải phương trình bậc 2
    
  52. Viet Hung said

    Thua thay,nho thay help em ve java collection.
    Em da tao class point {x,y,z}.Em muon sort Linkedlist tu nho den lon theo khoang cach cua point do den mot diem cho truoc A.Em da lam nhu vay nhung khong duoc:
    LinkedList LL= new LinkedList();
    class distance_compare implements Comparator{
    public Float compare(point M,point N){
    return(distance(N,A)-distance(M,B));}}
    class distance_compare dc=new class distance_compare;
    Collections.sort(LL,dc);

  53. Viet Hung said

    Thua thay,nho thay help em ve java collection.
    Em da tao class point {x,y,z}va class matran.Em can doc du lieu tu mot inputfile.txt sau do store cac point do vao matran(n dong , 3 cot)theo thu tu khoang cach tu diem do den diem A cho truoc tang dan.Ham khoang cach da duoc dinh nghia trong class point.Thanks thay nhieu.

  54. Võ Văn Hải said

    EM tạo lớp Point như sau

    public class Point implements Comparable<Point>{
    	private int x,y,z;
    	public Point() {
    	}
    	public Point(int x, int y, int z) {
    		this.x = x;
    		this.y = y;
    		this.z = z;
    	}
    	//...
    	@Override
    	public int compareTo(Point o) {
    		//cách compare của em ở đây
    		return 0;
    	}
    	
    	@Override
    	public String toString() {
    		return "<"+x+","+y+","+z+">";
    	}
    }
    

    Sau đó em có thể thao tác

    LinkedList<Point>lst=new LinkedList<Point>();
    //....đọc dữ liệu vào lst
    //sắp xếp danh sách
    Collections.sort(lst);
    

    Chúc vui!

  55. Viet Hung said

    Thua thay,em goi O la mot Point co dinh(ma em phai tinh toan tu du lieu dau vao).Em co 2 cau hoi:
    1)em dat Point O trong hay ngoai method nay?
    2)em khai bao this.Point nhu vay co OK khong?
    public int compareTo(Point A){
    if(distance(this.Point,O)>distance(A,O))return 1;else if distance(this.Point,O)==distance(A,O)return 0;else return -1;
    Truly cam on Thay !

  56. Viet Hung said

    Thua thay,em phai sort cai 2 cai list Point cua em theo 2 cach khac nhau:
    cach1)so sanh distance cua cac Point toi Point O1
    cach2)so sanh distance cua cac Point toi Point O2.
    public int compareTo(Point B) {point O1= get_center(); if (this.distanceTo(O1)>B.distanceTo(O1))return 1;else if
    (this.distanceTo(O1)==B.distanceTo(O1))return 0;else return -1;}
    Em dat Point O1 ben trong method,va goi method get_center o ngoai co duoc khong?
    Thanks Thay nhieu.

  57. Viet Hung said

    Thay oi, em tim ra loi giai roi.Em cung muon post len cho cac ban tham khao.Cam on thay nhieu nhieu :
    public static class O1compare implements Comparator{
    point O1;
    public O1compare(point A){O1=A;}

    public int compare(point A,point B) {if (A.distanceTo(O1)>B.distanceTo(O1))return 1;
    else if(A.distanceTo(O1)==B.distanceTo(O1))return 0;
    else return -1;}}

    public static class O2compare implements Comparator{
    point O2;
    public O2compare(point A){O2=A;}

    public int compare(point A,point B) {if (A.distanceTo(O2)>B.distanceTo(O2))return 1;
    else if(A.distanceTo(O2)==B.distanceTo(O2))return 0;
    else return -1;}}}

    O1compare c1 = new O1compare(O1);
    Collections.sort(tam1,c1);
    O2compare c2 = new O2compare(O2);
    Collections.sort(tam2,c2);

  58. Viet Hung said

    Thua Thay,em muốn tạo vòng lặp tính y=2*x cho đến khi y> 300 thì in ra.Em làm như sau nhưng vong lap cu lap hoai:
    class Tinh_y {
    public static void main(String[] args) {
    int y=0 , x=2;
    While(y<300){y=x*2;}
    System.out.println(y);
    }}
    Thay cho em xin code
    Các bạn gợi ý cho mình,hoặc cho mình xin code.Truly cảm ơn

  59. Võ Văn Hải said

    trong vòng lặp thì y luôn bằng 4 thì làm sao thoát khỏi vòng lặp với điều kiện y>300? Em phải tăng biến x theo cách nào đó theo yêu cầu của em.

  60. Viet Hung said

    Thưa thầy, khoảng trắng cũng được xem như là một kí tự.Em đọc từng dòng line của văn bản và lưu vào mảng row: String line=in.nextLine();
    Em muốn lưu 6 kí tự đầu vào row[0],tính luôn khoảng trắng.
    4 kí tự tiếp theo cho row[1],tính luôn khoảng trắng…Sau khi format xong,in ra theo đúng như vậy.Đây là format của file.pdb down từ ngân hàng dữ liệu Protein.
    Truly cám ơn thầy.

  61. Viet Hung said

    Thay oi, em nghi ra cach roi: String[]row=line.split(“”);Sau do
    string s1=row[1]+row[2]+row[3]+row[4]+row[5]+row[6];va lam tuong tu nhu vay.Chuc thay vui khoe, cam on website cua thay nhieu

  62. Phung the anh said

    em chao thay!

    Thua thay co mot van de ma em khong giai quyet dc mong thay giup em a.

    Co giao em yeu cau tao mot giao dien login bang java su dung JFrameFrom trong do ID va Password de trong mot file text. Em muon hoi thay lam the nao de lay duoc ID va PassWord trong file text do de so sanh voi gia tri nhap vao tai o TextField va PassWordField. Thay co the giup em duoc khong a. em cam on thay.

  63. BlackDiam0nd said

    Em coi những trả lời của thầy rất chi tiết và tận tình
    Cám ơn thầy giúp đỡ!
    Em muốn hỏi thầy :em có 1 file text chứa UserName và Password
    ví dụ:
    kid 123
    kid1 1234
    kid2 12345

    giữa UserName vs Password là khoảng trắng và giữa các User là xuống dòng.
    Em có 1 form login.
    Làm sao em có thể đọc file text và so sánh Username,Password nhập vào từ form vs các UserName và Password từ file text.
    Điều kiện: UserName đy kèm vs Password của nó
    ví dụ:kid vs 123–>sẽ được login
    kid vs 1234–>không login được

    Thầy có thể giúp em thêm câu này nữa:Cũng là 1 file text chứa các thông tin về 1 cuốn sách:
    book 23 NXBKimDong 10000
    book2 24 NXBKimDong 1100

    Em muốn show nó ra JTable vs Tên sách,số lượng,Tên nhà xuất bản,giá sách
    ví dụ:
    Tên sách Số lượng Tên nhà xuất bản giá sách
    book 23 NXBKimDong 1000

    Cám ơn thầy!

  64. Võ Văn Hải said

    Dùng Scanner đọc từng dòng. Sau đó dùng StringTokenizer tách dòng vửa đọc ra sẽ ok.

  65. BlackDiam0nd said

    Em làm được Login rồi:)
    Thầy giúp em phần JTable đc không?
    Thầy có thể cho em code Demo đc không?

  66. truong tan hanh said

    thầy ơi!e đang làm cái project ve qlsv nhưng đang bị vướng ở chổ csdl.e dùng csdl là file.txt nhưng khi e viết lớp đọc từ file.txt thi bi lỗi này ak:
    java.io.StreamCorruptedException: invalid stream header: 54485449
    java.io.StreamCorruptedException: invalid stream header: 41303031
    class dọc file của e như thế này ak:
    import java.io.*;
    import javax.swing.*;
    import java.util.Scanner;
    public class readerfilesv
    {
    public readerfilesv(){}

    public void listtofile(danhsachsv dssv, String fileName)
    {
    try{
    FileOutputStream fo=new FileOutputStream(fileName);
    ObjectOutputStream out=new ObjectOutputStream(fo);
    out.writeObject(dssv);
    }catch(IOException ioex)
    { System.out.println(ioex.toString());
    JOptionPane.showMessageDialog(null,”loi file”+ioex.toString());
    }
    }

    //////////////////////////////////////
    public danhsachsv filetolist(String fileName)
    {
    danhsachsv dssv=new danhsachsv ();
    try{
    FileInputStream fi=new FileInputStream(fileName);
    ObjectInputStream out=new ObjectInputStream(fi);
    while(fi.available()>0)
    dssv=(danhsachsv)out.readObject();
    out.close();
    }catch(IOException ioex)
    { System.out.println(ioex.toString());
    JOptionPane.showMessageDialog(null,”loi file”+ioex.toString());
    }
    catch(ClassNotFoundException cex){ }
    return dssv;

  67. Võ Văn Hải said

    Cái này không phải dạng text mà là dạng Serialization.
    Bạn chú ý lớp danhsachsinhvien và các lớp liên quan phải implements Serializable interface. Thêm 1 điểm nữa là khi bạn serial xong, bạn sửa file và build lại thì version không còn đúng nữa. Bạn phải xóa file dữ liệu và làm lại.

  68. phuoc vu said

    cám ơn Thầy.

  69. Jimmy said

    Thưa thầy:em phải so sánh một cấu trúc protein( tương ứng với 1 file.PDB ) trên ổ C máy tính của em với tất cả các file lấy từ database : http://www.ebi.ac.uk/thornton-srv/databases/CSA/ =>Trong code của em phải có một phần code để nhập dữ liệu từ cái link đó. Nhờ thầy gợi ý cho em về phần code này,em tìm không thấy trong blog của thầy.Thanks thầy nhiều.

  70. Jimmy said

    Thay oi,em doi cau tra loi cua thay ca tuan roi

  71. Võ Văn Hải said

    xin lỗi. Thầy đang làm luận án nên không có thời gian. em gửi riêng qua mail cho thầy xem.

  72. Thầy cho e hỏi!
    E muốn tách tất cả các câu truy vấn sql ra file text(.txt) thì e cấu trúc file text như thế nào?
    Và trong 1 hàm e gọi nhiều câu truy vấn, vậy thì e phải gọi thế nào để nó hiểu đúng cho từng câu truy vấn đã đọc lên?
    E xin cám ơn!

  73. Võ Văn Hải said

    Thầy nghĩ là nên dùng cấu trúc của properties collection (key=value).
    Tức là file text của em có dạng ví dụ như:
    #————————————
    sql.selectAllEmp=select * from Employee
    sql.deleteEmp=delete from Employee where EmpID=?
    #…
    #————————————
    Sau đó em dùng đối tượng java.util.Properties để đọc cấu trúc này. Và em có thể lấy câu truy vấn theo key.
    Chúc thành công!

  74. Jimmy said

    nhờ thầy gợi ý: project của em gồm 2 module :
    1) parser module : load file into memory from the link:http://www.ebi.ac.uk/thornton-srv/databases/CSA/ (khoảng 1000 file)
    2)algorithm: làm việc trên file đó
    nhờ thầy gợi ý,từng bước làm module 1.Thanks thầy nhiều

  75. VietHung said

    Thầy cho em hỏi chút về data structure :Aray,Array list, Vector,Linkedlist…sử dụng cái nào có lợi về mặt thời gian thực thi(time computing).Em có cái list khoảng 700 object , phải lặp khoảng 1000 lần,mỗi lần phải diệt hết cái list đó,thường xuyên sử dụng lệnh litst.get (i)

  76. Võ Văn Hải said

    LinkedList duyệt tuần tự, Array chiếm bộ nhớ không tối ưu và có vài giới hạn. Vector và ArrayList như nhau, chỉ khác là các method của Vector có synch(thread-safe) còn ArrayList thì không. Nếu ứng dụng của bạn không dùng multithread thì nên dùng ArrayList.
    Ngoài ra còn có Set và Map rất hay trong tìm kiếm.

  77. VietHung said

    Thưa thầy:em cần dùng OOP tìm tất cả các collection của B trong A.Cụ thể như sau:
    Input: Tập A gồm khoảng 1000 điểm.Tập B có 3 điểm {B1,B2,B3}.
    Output:Cần tìm tất cả bộ ba điểm{A1,A2,A3} trong A,sao cho tam giác A1A2A3=tam giác B1B2B3.
    Em dùng ArrayList chứa 1000 điểm A,so sánh các khoảng cách,vét cạn tất cả trường hợp,tìm ra nhưng thời gian thực thi chương trình chậm,nhờ Thầy gợi ý hướng cho em một thuật toán ,data structure,chạy nhanh hơn cách vét cạn

  78. HocLapTrinh said

    Hi Thầy!
    e có vấn đề cần thầy giúp, e có 1 file txt có dạng như:

    “status=123
    descrip= false, sss=[12]
    number: -343484
    string: test
    time= 20110707 20:10:05″

    vậy làm thế nào để e lấy được giá trị của mỗi dòng vd lấy ra dòng 1 là “123”, dòng 2 là “false, sss=[12]“..
    thấy hướng dẫn e bằng c# với ạ , cảm ơn thầy nhiều.

    e đọc đc từng dòng ra nhưng ko biết sử lý trên mỗi dòng như nào để lấy ra giá trị của nó :(

  79. NamNguyen said

    Thưa thầy! Em đang lập 1 chương trình tìm số lớn nhất sử dụng đa luồng: Có một array chứa n số nguyên. Chương trình chính tìm số lớn nhất bằng cách tạo 2 luồng: 1 luồng tìm số lớn nhất của n/2 số nguyên đầu, 1 luồng tìm số lớn nhất của phần còn lại. Sau khi có 2 giá trị luồng chính sẽ so sánh và in ra màn hình giá trị lớn nhất.
    Em vẫn chưa hiểu lắm về việc phân luồng để tìm số nguyên. Thầy có thể giúp đỡ em được không ạ? Em xin cảm ơn!

  80. Võ Văn Hải said

    Lấy từng dòng, dùng hàm split của chuỗi để tách theo dấu = hoặc : thế là xong.

  81. Ngatran said

    Em Chân Thành cảm ơn Thầy nhiều ạ!!!

  82. VietHung said

    Thầy cho em hỏi tại sao cấu trúc dữ liệu : hashtable lại có thể truy suất giữ liệu nhanh hơn cấu trúc mảng.Muốn implement hashtable ta cần 2 cái mảng: 1 mảng chứa index,1 mảng chứa value,1 hàm băm key thành index, việc truy suất dữ liệu trên hashtable : dùng hàm băm để tìm index,rồi dùng index,truy suất value ,cũng như trên mảng get(i) lấy phần tử ở vị trí thứ i=> giống nhau

  83. Hoang Hoa said

    Thưa thầy, thầy định hình giúp em bài tập từ điển mini với ạ, em mới học nên vẫn còn mơ hồ quá
    Yêu cầu chức năng:

    Từ điển nạp dữ liệu từ file có tên DICT.DAT với định dạng như sau: Mỗi mục từ nằm trên 1 dòng với cú pháp:

    :

    trong đó, là một chuỗi kí tự không chứa dấu hai chấm “:”; chỉ bao gồm đúng 01 kí tự space; là chuỗi kí tự kéo dài cho đến hết dòng.
    Người dùng đảm bảo sự tồn tại của file dữ liệu nằm tại thư mục nơi chạy chương trình, dữ liệu trong file là hợp lệ. Tuy nhiên, các mục từ trong file không được xếp theo thứ tự từ điển, không có giới hạn về số mục từ.

    Từ điển cần đáp ứng các lệnh sau do người dùng gõ vào tại dấu nhắc:
    Lệnh Công việc chương trình cần thực hiện

    save

    lưu nội dung từ điển ra tệp DICT.DAT theo thứ tự từ điển, với định dạng như đã quy định

    add:

    Nếu trong từ điển đã có mục từ dành thì nối thêm “; ” vào đuôi của meanings sẵn có trong mục từ đó. Nếu chưa có thì bổ sung mục từ mới.

    lookup

    tìm trong từ điển. Nếu tìm thấy thì in meaning trên một dòng (không được thừa hay thiếu dấu cách). Nếu không thì in ra thông báo “Not found.” trên một dòng

    delete

    xóa mục từ trong từ điển. Nếu tìm thấy và xóa thì in thông báo ” deleted.” trên một dòng (không được thừa hay thiếu dấu cách). Nếu không thì in ra thông báo “Not found.” trên một dòng.

    quit

    ngừng chương trình

  84. Võ Văn Hải said

    Với từ điển có cấu trúc như sau:

    @'cellist /'tʃelist/
    *  danh từ
    - người chơi viôlôngxen, người chơi xelô
    
    @'cello /'tʃelou/ Cách viết khác : ('cello)  /'tʃelou/
    *  danh từ
    - (âm nhạc) đàn viôlôngxen,  xelô
    
    @'chutist /'ʃu:tish/
    *  danh từ
    - ((viết tắt) của parachutist) (quân sự),  (thông tục) lính nhảy dù
    

    thì tôi sẽ đọc như sau:

    package readDICfile;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    import descriptDic.MyDic;
    import descriptDic.OneWord;
    
    public class ReadUTFdic {
    
    	private MyDic dic;
    	private boolean done=false;
    	PrintWriter err=null;
    	
    	public ReadUTFdic(MyDic dic){
    		this.dic=dic;
    		try {
    			err=new PrintWriter(new FileOutputStream(new File("\\errword.log")));
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    	/**
    	 * Xử lý 1 từ
    	 * @param line
    	 * @return
    	 */
    	private OneWord xuly1Tu(String line){
    		OneWord w=new OneWord();
    		try {
    			String []lines=line.split("\n");
    			String firstLine=lines[0];
    			String word = firstLine.substring(1);//.replaceAll("@", "");//
    			String []a = word.split("/");
    			w.setWord(a[0].trim());
    			System.out.println(a[0]);
    			if(a.length>1)
    				w.setSpeach("/"+a[1]+"/");
    			else
    				w.setSpeach("/???/");
    			
    			String mean="";
    			for(int i=1;i<lines.length;i++)
    				mean+=lines[i]+"\n";
    			w.setMeaning(mean);
    			dic.AddWord(w, true);
    		} catch (Exception e) {
    			err.println(e.getStackTrace().toString());
    			err.println("====================================================");
    		}
    		err.close();
    		return w;
    	}
    	//===================================
    	public void readBlock(final String filename){
    		
    		/*Runnable r=new Runnable()
    		{
    			public void run() {*/
    				String line="";
    				try {
    					Scanner in=new Scanner(new File(filename),"UTF-8");
    					
    					String tu="";
    					while(in.hasNextLine()){
    						line = in.nextLine().trim();
    						if(!line.equals("")){
    							tu+=line+"\n";
    						}
    						else{
    							xuly1Tu(tu);
    							tu="";
    						}
    					}
    					xuly1Tu(tu);
    				}catch (Exception ex) {
    					System.out.println("=============================================");
    					System.out.println("\nLoi o tu "+ line+"\n");
    					ex.printStackTrace();
    					System.out.println("=============================================");
    					}
    				/*}
    		};
    		new Thread(r).start();*/
    		}
    	public boolean isDone() {
    		return done;
    	}
    
    	public void setDone(boolean isDone) {
    		this.done = isDone;
    	}
    
    }
    

    với OneWord là lớp sau:

    
    import java.io.Serializable;
    
    public class OneWord implements Comparable<OneWord> ,Serializable{
    	private String word;
    	private String speach;
    	private String meaning;
    	private String comment;
    
    	public OneWord() {
    		super();
    	}
    
    	public OneWord(String word, String speach, String meaning, String comment) {
    		super();
    		this.word = word;
    		this.speach = speach;
    		this.meaning = meaning;
    		this.comment = comment;
    	}
    
    	public String getComment() {
    		return comment;
    	}
    
    	public void setComment(String comment) {
    		this.comment = comment;
    	}
    
    	public String getMeaning() {
    		return meaning;
    	}
    
    	public void setMeaning(String meaning) {
    		this.meaning = meaning;
    	}
    
    	public String getSpeach() {
    		return speach;
    	}
    
    	public void setSpeach(String speach) {
    		this.speach = speach;
    	}
    
    	public String getWord() {
    		return word;
    	}
    
    	public void setWord(String word) {
    		this.word = word;
    	}
    
    	@Override
    	public int hashCode() {
    		final int PRIME = 31;
    		int result = 1;
    		result = PRIME * result + ((word == null) ? 0 : word.hashCode());
    		return result;
    	}
    
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		final OneWord other = (OneWord) obj;
    		if (word == null) {
    			if (other.word != null)
    				return false;
    		} else if (!word.toLowerCase().equals(other.word.toLowerCase()))
    			return false;
    		return true;
    	}
    
    	@Override
    	public String toString() {
    		return this.word+"\n"+this.speach+"\n"+this.meaning+"\n"+this.comment;
    	}
    
    	public int compareTo(OneWord o) {
    		return this.word.toLowerCase().compareTo(
    				o.getWord().toLowerCase());
    	}
    }
    

    và MyDic là lớp như sau:

    import java.io.Serializable;
    import java.util.TreeMap;
    import java.util.Vector;
    
    public class MyDic implements Serializable{
    	private static final long serialVersionUID = 1L;
    	
    	private TreeMap<String, OneWord> dic=null;
    
    	public MyDic() {
    		dic=new TreeMap<String, OneWord>();
    	}
    	/**
    	 * Hàm này thêm 1 từ vào từ điển
    	 * @param w:từ cần thêm
    	 * @param overwrite: nếu =true thì cho ghi đè và ngược lại
    	 * @return Trả về true nếu thêm được
    	 */
    	public boolean AddWord(OneWord w,boolean overwrite){
    		if(dic.containsKey(w.getWord()))
    			if(overwrite){
    				dic.put(w.getWord(), w);
    				return true;
    			}
    			else
    				return false;
    		else
    			dic.put(w.getWord(), w);
    		return true;
    	}
    	/**
    	 * Hàm tra từ trong từ điển
    	 * @param word là từ cần tra
    	 * @return Trả về 1 từ nếu tra thành công.
    	 * 	<p>Trả về <b>null</b> nếu từ không có trong từ điển</p>
    	 */
    	public OneWord Lookup(String word){
    		OneWord w=dic.get(word);
    		return w;
    	}
    	
    	public Vector<String> getKeyList()
    	{
    		Vector<String>v=new Vector<String>();
    		for(String key:dic.keySet()){
    			v.add(key);
    			}
    		return v;
    	}
    	public OneWord getValues(){
    		return dic.values().iterator().next();
    	}
    	public int Count(){
    		return dic.size();
    	}
    }
    
  85. Từng bước học lập trình said

    Hi Thầy!

    E cần sự giúp đỡ của thầy về vấn đề sử lý đọc file Csv, e gửi vào email của Thầy rùi ạ, Thầy check email và xem giúp e với nhé :(

    Thanks Thầy!

  86. Từng bước học lập trình said

    Note: Thầy hướng dẫn e bằng c# với ạ

  87. Thanh Huy said

    Thầy ơi lỗi ” …không xác định-o-c-S…” có nghĩa là bị lỗi gì vậy ạ!!!!!

  88. Võ Văn Hải said

    [Thầy ơi lỗi ” …không xác định-o-c-S…” có nghĩa là bị lỗi gì vậy ạ!!!!!]
    Không biết chính xác, em in stacktrace xem thử mới biết được.

  89. ngô hải said

    cho em hỏi khi đang mở file này có mở được file khác không ạ

  90. VietHung said

    khi em add khối lượng dữ liệu khá lớn vào hashtable ,em gặp problem : java.lang.out of memory : heap space.Có cách nào để em increase initial heap space… from the command line.
    Nhờ thầy giúp em

  91. kim chi said

    e chào thầy, thầy cho e hỏi, còn có những luồng nào, và cách dùng chúng được k ạ ?,

  92. Võ Văn Hải said

    1.
    trong java có 3 loại luồng: System.in; System.out và System.err.
    luồng in lo việc đọc vào; luồng out lo việc xuất ra; còn luồng er giống như luồng out tuy nhiên xuất ra dành cho lỗi.
    2.InputStream/OutputStream là các lớp trừu tượng. các lớp nhập xuất đều extends từ 2 lớp này.
    lớp BufferedInputStream kế thừa từ FilterInputStream mà FilterInputStream kết thừa từ InputStream (tương tự cho Out).

  93. đời không long đong said

    Em chào thầy ạ. thầy cho em xin lời khuyên được không ạ. em là sinh viên năm hai, khoa
    CNTT
    Em không biết là bài tập khó và nặng hay là khi thi vào trường, em không xác định được trường mình muốn vào và không có cảm hứng khi làm bài. Nhiều lần em nghĩ liệu có phải em đã chọn sai trường?
    Hiện giờ em rất băn khoăn? em nghĩ đến thi lại thì chưa xác định được trường nào mình yêu thích thật sự?
    em là con gái nhưng em không ngại việc mình sẽ học cùng các em 94 ạ.
    Xin thầy cho em lời khuyên ạ.

  94. Tran Van Nhat said

    Thầy ơi giúp đỡ em với…………………………………………………………
    Đề bài:

    Từ điển nạp dữ liệu từ file có tên DICT.DAT với định dạng như sau: Mỗi mục từ nằm trên 1 dòng với cú pháp
    :

    trong đó, là một chuỗi kí tự không chứa dấu hai chấm “:”; chỉ bao gồm đúng 01 kí tự space; là chuỗi kí tự kéo dài cho đến hết dòng.
    Người dùng đảm bảo sự tồn tại của file dữ liệu nằm tại thư mục nơi chạy chương trình, dữ liệu trong file là hợp lệ. Tuy nhiên, các mục từ trong file không được xếp theo thứ tự từ điển, không có giới hạn về số mục từ.

    Từ điển cần đáp ứng các lệnh sau do người dùng gõ vào tại dấu nhắc:
    Lệnh Công việc chương trình cần thực hiện

    save

    lưu nội dung từ điển ra tệp DICT.DAT theo thứ tự từ điển, với định dạng như đã quy định

    add:

    Nếu trong từ điển đã có mục từ dành thì nối thêm “; ” vào đuôi của meanings sẵn có trong mục từ đó. Nếu chưa có thì bổ sung mục từ mới.

    lookup

    tìm trong từ điển. Nếu tìm thấy thì in meaning trên một dòng (không được thừa hay thiếu dấu cách). Nếu không thì in ra thông báo “Not found.” trên một dòng

    delete

    xóa mục từ trong từ điển. Nếu tìm thấy và xóa thì in thông báo ” deleted.” trên một dòng (không được thừa hay thiếu dấu cách). Nếu không thì in ra thông báo “Not found.” trên một dòng.

    quit

    ngừng chương trình

    bài tập của em buộc phải sử dụng danh sách liên kết để làm,em đang xây dựng,nhưng chỉ đọc dữ liệu từ file mà bổ sung 3 class như chương trình thầy viết thì phức tạp quá. chưa kể là bọn em phải xây dựng lớp Node,List.v.v
    Có cách nào đọc dữ liệu từ file ra đơn giản hơn không hả thầy?Em hì hục làm cả tuần nay rồi mà không ra cái gì cả thầy ạ…
    hay thầy chỉ dạy cho em mô hình thiết kế từ điển mini với,ví dụ nó có các lớp nào,mỗi lớp có những phương thức nào,chức năng cuả phương thức này là gì… Code thì để em tự viết cũng được. Em cứ vừa mầy mò ,vừa gõ code,chẳng ra cái gì cả.em dùng eclipse thầy à.

    Có gì thầy liên lạc với em qua địa chỉ mail : tr.vnhat@gmail.com

    Chương trình này lớn quá. Em vẫn không định hình hết chương trình ,bọn em lại chưa học phân tích thiết kế hướng đối tượng nữa.
    em viết được 4 lớp rồi,nhưng vẫn không chạy được. nếu thầy có thể cho em mail ,em gửi bài làm của em cho thầy ,mong thầy giúp đỡ em.
    Cảm ơn thầy!

  95. Võ Văn Hải said

    Bạn có bao giờ tự hỏi là mình đã cố gắng với cái mình đang có chưa? Nếu bạn đã cố gắng hết sức mà vẫn không được thì lúc đó bạn mới nghĩ mình chọn nhầm ngành. Ngành nào cũng rất khó khăn nếu mình học đúng với chữ HỌC. CNTT là 1 ngành với rất nhiều thách thức, hấp dẫn và…rất nhiều khó khăn. Nếu bạn không phải là người an phận thì tôi nghĩ bạn nên cố gắng.
    Chúc bạn thành công!

  96. Trần Văn Nhất said

    Mong thầy giúp đỡ!
    Em chẳng hiểu sao em post code lên thì không được.nhưng em thử lại vài lần rồi cũng không được.
    Em mong thầy giúp đỡ em những phần sau:

    – 1- Thầy giải thích giúp em lệnh split() cấu trúc và cách dùng với.
    -2- Em mong thầy xem giúp em chương trình xây dựng từ điển mini của em,ý tưởng của em là sử dụng danh sách liên kết kép để xây dựng với 3 lớp cơ sở là Node,HeaderNode,List. Lớp chính là SimpleDict. Mong thầy giúp đỡ em về phần nhập xuất file nhập từ file với cấu trúc như sau:
    :
    Do em chưa học ngôn ngữ lập trình java,chưa học thiết kế hướng đối tượng,em đang học lập trình hướng đối tượng sử dụng ngôn ngữ java nên chưa hình dung hết được. mong thầy xem xét ,giúp đỡ và gợi mở cho em một số hướng để hoàn thiện bài tập này.

  97. Trần Văn Nhất said

    Em không thể post code của mình đã làm lên đây được,mặc dù đã thử nhiều lần.
    Vậy mong thầy cho em xin địa chỉ mail hoặc liên lạc với em qua mail:
    tr.vnhat@gmail.com
    Rất mong nhận được sự giúp đỡ của thầy.

  98. thuhoai said

    còn 1 vấn đề nữa ạ, thầy giải thích giúp em câu lệnh:
    (IOException e)
    và e.printStackTrace(); với ạ.
    em cám ơn thây.

  99. thuhoai said

    em chào thầy . em có 1 chỗ chưa hiểu, thầy giúp em với ạ.
    trong java: nếu dùng
    true: nếu file chưa tồn tại thì tạo file và nếu file đã tồn tại thì thì ghi nối tiếp vào file
    false: nếu file chưa tồn tại thì tạo file nếu đã tồn tại thì ghi đè lên file(tức là nội dung file cũ bị xóa và file mới được ghi với nội dung như thế đúng không ạ? ) nếu như thế thì em không làm được. Đây là code của em, thầy xem giúp em với ạ
    em cảm ơn thầy.

  100. Võ Văn Hải said

    catch IOEXception là nếu có gặp lỗi IO thì xử lý trong đoạn catch này. printStackTrace là phương thức in cái vết lỗi ra màn hình cho xem.

  101. thuhoai said

    em chào thầy.
    em đọc code từ điển bên trên của thầy nhưng nhiều chỗ em không hiểu. thầy có thể comment kỹ hơn về code đó được không ạ.
    em muốn dùng riêng 1 hàm sort để sắp xếp thứ tự từ điển theo đề bài của bạn ấy thì như thế nào ạ.

  102. Toolbar said

    Thầy cho em hỏi. khi đọc và ghi file trong 1 file gặp lỗi không tìm thầy file. Như thầy chỉ dẫn , nếu dùng eclipse phải để file đó ở trong mục cao nhất ở project nhưng em vẫn gặp lỗi đó. em thử đặt trong các mục khác nhưng vẫn gặp phải lỗi này.
    Cho em hỏi ,em dùng eclipse sử dụng đầu tiên còn có console nhưng không biết em cài đặt thế nào giờ nó không hiện ra cửa sổ console nữa. nên em không biết chương trình chạy thế nào. Mong thầy giúp đỡ.

  103. Võ Văn Hải said

    dùng đường dẫn tương đối thì copy file đó paste vào project eclipse (con của project). Còn tuyệt đối thì phải chỉ rõ ví dụ: C:\\abc\\xyz\\data.txt chẳng hạn.
    Còn cái cửa sổ console thì bạn vào menu Window, chọn mục Show View rồi chọn Console là OK

  104. Võ Văn Hải said

    Sắp xếp gì nữa? TreeMap tự nó sắp xếp rồi sắp nỗi gì? Vui lòng coi kỹ lại cấu trúc dữ liệu nhé!

  105. cuong dang said

    cho mình hỏi file của mình có dạng như sau:
    12 2 3 4 5 6
    7 4 5 6 4 6
    làm thế nào để lấy được nguyên số 12 ra khỏi file và lưu vào biến x

  106. Võ Văn Hải said

    “cho mình hỏi file của mình có dạng như sau:
    12 2 3 4 5 6
    7 4 5 6 4 6
    làm thế nào để lấy được nguyên số 12 ra khỏi file và lưu vào biến x”

    Scanner sc=new Scanner(new FileInputStream("tentenfile.txt"));
    while(sc.hasNextLine()){
    	String line=sc.nextLine();
    	StringTokenizer tk=new StringTokenizer(sc);
    	while(tk.hasMoreTokens()){
    		String val=tk.nextToken();
    		int x=Integer.parseInt(val);
    		//xu ly cua ban
    	}
    }
    
  107. viết notedpad said

    anh cho ẹm hỏi hịên tại em đang víết chương trình notedpad bằng eclipse nhưng tới đọan lưu file bằng định dạng txt thì em không bjk cách làm, mong anh giải đáp

  108. Võ Văn Hải said

    Đâu đó trong blog này có bài đó.

  109. cuong dang said

    rất cám ơn bài viết của bạn!

  110. maomaopink said

    cho em hỏi: em có một TextBox Tên trong đó có chứa cả họ và tên. Để tách được họ và tên riêng ra thì mình làm thế nào hả thầy!

  111. maomaopink said

    em xin bổ sung là làm thế nào khi viết bằng ngôn ngữ C#

  112. Bich thao said

    em co mot van de nhu sau : em tao mot doan script sql de tu dong tao script insert dang print sau khi excute .em muon form hoa no bang cach cho chay excute sql roi hien thi may cai dong print cua scipt insert do len textbox trong C# .Thay hoac ai bit thi chi em voi . em dang nghien cuu cai nay

  113. Nhung said

    em chao thay !
    thay giup em bai nay voi
    De bai:xay dung chuong trinh doc vao danh sach cac so thuc trong mot file van ban(moi so tren mot dong)tinh tong cac so do roi ghi ra mot file khac
    Em moi bat dau mon java can ban nay nen ngu ngo lam thay a.Em rat mong nhan duoc cau tra loi cua thay
    Thank thay !

  114. Võ Văn Hải said

    “De bai:xay dung chuong trinh doc vao danh sach cac so thuc trong mot file van ban(moi so tren mot dong)tinh tong cac so do roi ghi ra mot file khac”

     
    import java.io.FileInputStream;
    import java.util.Scanner;
    
    public class ReadFloatFile {
    	public double sumfile(String filepath)throws Exception{
    		Scanner sc=new Scanner(new FileInputStream(filepath));
    		double result=0d;
    		while(sc.hasNextLine()){
    			float f=Float.parseFloat(sc.nextLine());
    			result+=f;
    		}
    		return result;
    	}
    	public static void main(String[] args) throws Exception{
    		ReadFloatFile r=new ReadFloatFile();
    		double d=r.sumfile("data.txt");
    		System.out.println("kết quả:"+d);
    	}
    }
    
  115. going_home said

    hi,thầy có thể phân tích cái đề bài này giúp em được k ạ?
    e cảm ơn thầy trước.

    1) Xây dựng biể u đồ lớp từ mã nguồn Java:
    – Phân tích mã nguồn Java
    – Hiển thị biểu đồ lớp và các quan hệ (is_a, has_a) của các lớp.

  116. system("pause") said

    thay cho e hoi la voi de bai nhu nay thi len lam nhu nao a
    Xây dựng biểu đồ lớp từ mã nguồn Java:
    – Phân tích mã nguồn Java
    – Hiển thị biểu đồ lớp và các quan hệ (is_a, has_a) của các lớp.

    e cam on thay truoc!

  117. Võ Văn Hải said

    “thay cho e hoi la voi de bai nhu nay thi len lam nhu nao a
    Xây dựng biểu đồ lớp từ mã nguồn Java:
    – Phân tích mã nguồn Java
    – Hiển thị biểu đồ lớp và các quan hệ (is_a, has_a) của các lớp.”
    Cái này hơi khó đây!
    Bạn dùng tool ANTLR để đọc source rồi phân tích.

  118. going_home said

    thầy có thể nói rõ hơn k ạ?e mới học java nên cũng k biết nhiều

  119. going_home said

    thầy ơi nếu e dùng cái tokenizer để chia nhỏ mã nguồn ra liệu có được k???

  120. Nh0k said

    Chào thầy ạh, em đang muốn ghi dữ liệu từ table xuống file, giống như mình in hóa đơn cho dòng dữ liệu đó, thầy có thể giúp em được không ạ!

  121. Nh0k said

    thầy cho em hỏi, sao em không tạo file được, em muốn lưu dữ liệu trong table xuống file để in hóa đơn ra ạh. code của em sai chỗ nào thầy xem giúp em ạh.
    print_bill.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    try {
    OutputStreamWriter buff=new OutputStreamWriter(new FileOutputStream(“lam.txt”),”UTF-8″);
    int row = hoadon_table.getSelectedRow();
    String ma=(String)hoadon_table.getValueAt(row,0);
    buff.write(ma,0,ma.length());
    String username=(String)hoadon_table.getValueAt(row,1);
    buff.write(username,0,username.length());
    String manv=(String)hoadon_table.getValueAt(row,2);
    buff.write(manv,0,manv.length());
    String ngaylap=(String)hoadon_table.getValueAt(row,3);
    buff.write(ngaylap,0,ngaylap.length());
    String tonggia=(String)hoadon_table.getValueAt(row,4);
    buff.write(tonggia,0,tonggia.length());

    buff.close();
    }catch (Exception ex) {
    ex.printStackTrace();
    System.out.println(“Erro”);
    }

    }
    });

  122. Võ Văn Hải said

    Sửa lại như sau:

     
    PrintWriter out=new PrintWriter(new FileOutputStream("lam.txt"),true);//auto flush
    out.println("cái gì muốn ghi ra file trên 1 dòng");
    //hoặc out.print("???"); nếu không muốn xuống dòng
    
  123. Long said

    Thầy Hải, cho em hỏi, am muốn đọc dữ liệu từ tập tin trong máy tính, mà tập tin đó do người dùng chọn đường dẫn. giống như mở 1 tập tin trong Word và người dùng chọn đường dẫn đến tập tin.

  124. Võ Văn Hải said

    Em dùng JFileChooser để chọn file.

  125. long said

    thay oi cho em hoi cach doc va ghi vao file xml

    thanksss thay nhieeu

  126. Vương Mạnh Tuấn said

    Em chào thầy , em là người mới học java,em muốn nhờ thầy giúp em một chút.Em có một danh sách SĐT dạng file text có nội dung như sau :
    0983428607
    0913280242
    0912187327
    0903227095
    0908186834
    0913929701
    012574740007
    0915566762
    0914521133
    0975585566
    0982173738
    Mà em chỉ muốn đọc các SĐT có đầu 091 thì phải làm thế nào ạ.Em mong thầy và các bạn giảng giải giúp em.
    Em chân thành cảm ơn thầy.

  127. Võ Văn Hải said

    Scanner sc=new Scanner(new FIleInputStream("dt.txt"));
    while(sc.hasNextLine()){
        String line=sc.nextLine();
    	if(line.startWiths("091")){
    		//xử lý
    	}
    }
    
  128. nguyễn thị duyên said

    thầy ơi ! thầy cho e hỏi chút ạ ! cô giáo e cho 1 bảng số liệu gồm 3 cột mỗi cột gồm 40 hàng ( là các số), cột 1 là số thứ tự ( gồm 40 số ) cột 2 là giá trị nhập, cột 3 là giá trị xuất. và cô yêu cầu ” Tạo file dữ liệu trong notepad (dạng .txt) ” em chưa biết phải làm thế nào cả, thầy giúp e với ạ ! em cám ơn thầy !

  129. thế tây said

    thầy ơi fix lỗi hộ em cái bài này ạ!
    đề bài :
    Viết chương trình nhập một dãy số thực từ bàn phím, và sử dụng các kiến thức về luồng vào
    ra trong Java:
    – sắp xếp dãy số thực đó theo tứ tự tăng dần và giảm dần. (Sử dụng vòng lặp for với
    Buffer reader để làm).
    – Thực hiện chèn một số thực vào vị trí bất kỳ trong dãy số (vị trí được nhập từ bàn
    phím). Sử dụng buffer.insert để thực hiện chèn.
    – Các kết quả được in ra màn hình

    Đây là code của em

    import java.io.*;
    import java.util.*;
    public class InputArray {

    public static void main(String []args) throws Exception,ArrayIndexOutOfBoundsException{
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    System.out.print(“Input size of array : “);
    int n = Integer.parseInt(input.readLine());
    int a[]=new int[n];

    for(int i = 0;i < n;i ++){
    System.out.print(" a["+ i +"] = ");
    a[i]=Integer.parseInt(input.readLine());
    }

    for(int i = 0;i < n-1;i ++){
    for(int j = i+1;j < n;j ++){
    if(a[i] < a[j]){
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
    }
    }
    }
    System.out.println("Array after sort :");
    for(int i = 0;i < n;i ++)
    System.out.print(a[i]+" ");
    System.out.print("\nInput elemnet insert : ");
    int b = Integer.parseInt(input.readLine());

    System.out.print("Input place insert : ");
    int k = Integer.parseInt(input.readLine());

    StringBuffer buffer = new StringBuffer();

    try{
    for(int i = 0;i < n;i ++){
    //buffer.insert(0," ");
    buffer.insert(0,a[i]);
    buffer.insert(0," ");

    }

    try{
    if(k < n){
    // buffer.insert(k," ");
    buffer.insert(k,b);
    buffer.insert(k + 1," ");
    }

    System.out.printf("buffer after inserts:" + buffer.toString());
    }
    catch(ArrayIndexOutOfBoundsException e){
    System.err.println("Error!");
    }

    }
    catch(ArrayIndexOutOfBoundsException e){
    System.err.println("Error!");
    }
    }
    }

  130. thuongnguyen said

    thầy ơi thầy cho em hỏi muốn chuyển 1 Vector sang 1 List thì làm thế nào ạ

  131. Nh0k said

    Em cám ơn thầy rất nhiều ạ!

  132. hùng said

    thưa thầy!
    em dùng tool ANTLR, nhưng gặp vấn đề về sử dụng Tiếng Việt.
    em mong được sự giúp đỡ của thầy!
    em chân thành cảm ơn!

  133. Võ Văn Hải said

    Thầy chưa thử ANTLR với tiếng Việt, tiếng Việt là “ngoại lệ”.

  134. dev said

    Thầy ơi! e mới vào cty, được giao 1 task là viết ctring để get toàn bộ error từ Logging trong 1 trương trình khác. trước thì nó bung ra file log.txt, jo no không muốn cho ra file txt nữa mà muốn lưu vào database
    vd trong ctrinh của họ

    private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
    #if (DEBUG)
    // DO NOTHING
    #else
    Logging.LogHandler.AddLine(typeof(Program), “Thread exception occured: ” + e.Exception.ToString());
    #endif
    }
    jo e phải get cái error vào trong database (Logging là thư viện Logging.dll)
    mà trong ctrinh của họ có nhiều các function error như thế.
    :( e đang ko biết làm thế nào.
    Thầy giúp e với, cảm ơn Thầy.

  135. japanese1801 said

    thầy oi?thầy giúp e với nha!
    e đang làm đồ án viết ứng dụng tra cứu động từ bất quy tắc trên dttd nokia bằng j2me.
    e đang sử dụng netbean 7.0
    e đã thiết kế giao diện
    nhưng còn phần đọc dữ liệu e ko biết phải làm thế nào cả?thầy hướng dẫn cho e dc ko thầy.file dữ liệu của e là file txt
    đây là giao diện của e
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */

    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;
    public class Midlet extends MIDlet implements CommandListener{

    private Form mMainForm;
    private Display display;
    private Command cmdExit;
    private Command cmFind;
    private TextField tfFind;
    public Midlet() {

    display = Display.getDisplay(this);
    tfFind = new TextField(“Tim”, “”, 10, TextField.ANY);
    mMainForm = new Form(“Irregular verbs dictionary”);
    cmdExit = new Command(“Exit”,Command.EXIT,1);
    cmFind = new Command(“Tim”, Command.SCREEN, 2);
    mMainForm.addCommand(cmdExit);
    mMainForm.addCommand(cmFind);
    mMainForm.append(tfFind);
    mMainForm.setCommandListener(this);

    }

    public void startApp() {

    display.setCurrent(mMainForm);

    }

    public void pauseApp() {

    }

    public void destroyApp(boolean unconditional) {

    }

    public void commandAction(Command c, Displayable s){
    if (c == cmFind)
    {
    }
    else if (c == cmdExit)
    {
    destroyApp(false);
    notifyDestroyed();
    }
    }
    }

  136. Tấn Đạt said

    Thưa thầy!
    Cho em hỏi mình có thể insert nội dung vào bookmark trong file word dùng java được không ạ?
    Em xin cảm ơn thầy!

  137. Trọng Đức said

    Em chào thầy. Em muốn đọc 1 file .txt có cấu trúc như sau đầu tiên ghi mã lớp, sau đó là tên các học sinh trong lớp. Em ví dụ như sau ạ:
    1A
    Nguyen Huy Hung
    Tran Quang Vu
    2A
    Do Quang Vinh
    Nguyen Thai Binh
    thì làm như thế nào ạ . Mong thầy giúp đỡ.

  138. Võ Văn Hải said

    EM có 1 cái ArrayList lưu tất cả các lớp mà em có, dang code:

    ArrayList<String>allClasses=new ArrayList<String>()
    allClasses.add("1A");
    allClasses.add("2A");
    ....
    

    Trong code đọc file em viết như sau

    Scanner in=new Scanner(new FileInputStream("ten_file_du_lieu.txt"));
    while(in.hasNextLine()){
      String line=in.nextLine().trim();
      if(allClasses.contains(line)){
          //day la lop dạng 1A
      }
     else{
       //xử lý tên sinh viên
    }
    }
    
  139. sitruong said

    Thầy ơi cho em hỏi đọc 1 file .DAT (bên trong file .dat có dữ liệu: Interger 4 byte, double 8 byte, short 2 byte). Giờ làm sao hiển thị từng dữ liệu bên trong đó.

  140. phùng thế said

    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package javaapplication3;

    public class mathang extends javax.swing.JFrame {

    public mathang() {
    initComponents();
    }
    thongtin_mathang ttmathang;

    @SuppressWarnings(“unchecked”)
    //
    private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    jLabel5 = new javax.swing.JLabel();
    mhma = new javax.swing.JTextField();
    mhten = new javax.swing.JTextField();
    mhmaloai = new javax.swing.JTextField();
    mhdonvi = new javax.swing.JTextField();
    mhdongia = new javax.swing.JTextField();
    mhthem = new javax.swing.JButton();
    mhxoa = new javax.swing.JButton();
    mhthoat = new javax.swing.JButton();
    mhhien = new javax.swing.JButton();
    jScrollPane1 = new javax.swing.JScrollPane();
    jTable1 = new javax.swing.JTable();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setBackground(new java.awt.Color(255, 0, 51));
    jPanel1.setForeground(new java.awt.Color(255, 51, 51));

    jLabel1.setText(“Mã Hàng”);

    jLabel2.setText(“Tên Hàng”);
    jLabel2.setToolTipText(“”);

    jLabel3.setText(“Mã Loại”);

    jLabel4.setText(“Đơn Vị Tính”);

    jLabel5.setText(“Đơn Giá”);

    mhthem.setText(“Thêm”);
    mhthem.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    mhthemActionPerformed(evt);
    }
    });

    mhxoa.setText(“Xoa”);
    mhxoa.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    mhxoaActionPerformed(evt);
    }
    });

    mhthoat.setText(“Thoát”);
    mhthoat.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    mhthoatActionPerformed(evt);
    }
    });

    mhhien.setText(“Hiện”);
    mhhien.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    mhhienActionPerformed(evt);
    }
    });

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createSequentialGroup()
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    .addComponent(mhthem))
    .addGap(42, 42, 42)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createSequentialGroup()
    .addComponent(mhxoa)
    .addGap(44, 44, 44)
    .addComponent(mhthoat)
    .addGap(51, 51, 51)
    .addComponent(mhhien))
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
    .addComponent(mhdongia, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)
    .addComponent(mhdonvi, javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(mhmaloai, javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(mhten, javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(mhma, javax.swing.GroupLayout.Alignment.LEADING)))
    .addGap(0, 62, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createSequentialGroup()
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(jLabel1)
    .addComponent(mhma, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
    .addGap(18, 18, 18)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(mhten, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel2))
    .addGap(30, 30, 30)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(mhmaloai, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel3))
    .addGap(18, 18, 18)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(mhdonvi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel4))
    .addGap(26, 26, 26)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(mhdongia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel5))
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(mhthem)
    .addComponent(mhxoa)
    .addComponent(mhthoat)
    .addComponent(mhhien))
    .addGap(26, 26, 26))
    );

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null},
    {null, null, null, null, null}
    },
    new String [] {
    “Mã Hàng”, “Tên Hàng”, “Mã Loại”, “Đơn Vị Tính”, “Đơn Giá”
    }
    ));
    jScrollPane1.setViewportView(jTable1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    .addGap(0, 385, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(34, 34, 34)
    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(275, Short.MAX_VALUE))
    );

    pack();
    }//

    private void mhthemActionPerformed(java.awt.event.ActionEvent evt) {
    String ma=mhma.getText();
    String ten=mhten.getText();
    String maloai=mhmaloai.getText();
    int donvi= Integer.valueOf(mhdonvi.getText()).intValue();
    int dongia=Integer.valueOf(mhdongia.getText()).intValue();
    ttmathang=new thongtin_mathang(ma,ten,maloai,donvi,dongia);
    mhma.setText(“”);
    mhten.setText(“”);
    mhmaloai.setText(“”);
    mhdonvi.setText(“”);
    mhdongia.setText(“”);

    }

    private void mhxoaActionPerformed(java.awt.event.ActionEvent evt) {
    mhma.setText(“”);
    mhten.setText(“”);
    mhmaloai.setText(“”);
    mhdonvi.setText(“”);
    mhdongia.setText(“”);
    }

    private void mhthoatActionPerformed(java.awt.event.ActionEvent evt) {
    System.exit(1);
    }
    int dong=0,cot=0;
    private void mhhienActionPerformed(java.awt.event.ActionEvent evt) {
    jTable1.setValueAt(ttmathang.getMahang(),dong,cot);
    cot++;
    jTable1.setValueAt(ttmathang.getTenhang(),dong,cot);
    cot++;
    jTable1.setValueAt(ttmathang.getMaloai(),dong,cot);
    cot++;
    jTable1.setValueAt(ttmathang.getDonvi(),dong,cot);
    cot++;
    jTable1.setValueAt(ttmathang.getDongia(),dong,cot);
    cot=0;
    dong++;
    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    /*
    * Set the Nimbus look and feel
    */
    //
    /*
    * If Nimbus (introduced in Java SE 6) is not available, stay with the
    * default look and feel. For details see
    * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
    */
    try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if (“Nimbus”.equals(info.getName())) {
    javax.swing.UIManager.setLookAndFeel(info.getClassName());
    break;
    }
    }
    } catch (ClassNotFoundException ex) {
    java.util.logging.Logger.getLogger(mathang.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    java.util.logging.Logger.getLogger(mathang.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    java.util.logging.Logger.getLogger(mathang.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(mathang.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //

    /*
    * Create and display the form
    */
    java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {
    new mathang().setVisible(true);
    }
    });
    }
    // Variables declaration – do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField mhdongia;
    private javax.swing.JTextField mhdonvi;
    private javax.swing.JButton mhhien;
    private javax.swing.JTextField mhma;
    private javax.swing.JTextField mhmaloai;
    private javax.swing.JTextField mhten;
    private javax.swing.JButton mhthem;
    private javax.swing.JButton mhthoat;
    private javax.swing.JButton mhxoa;
    // End of variables declaration
    }
    chào thầy
    thầy cho e hỏi đoạn code trên e tạo 1 bảng để khi e nhập dư liệu vào bảng thì những dư liệu đó sẽ đk ghi ra 1 file.txt thì e cần phải viết thêm code ra như thế nào ạ.e bắt đầu học lập trình hướng đối tượng java và chúng e làm trên netbean ạ,thầy chỉ e cách làm,em cám ơn thầy

  141. Chào bạn, mình đang làm về vấn đề hệ thống thẻ ATM. Mình chưa được học về Database trong java nên mình có ý tưởng là khi mà người dùng nhập mã thẻ thì mình sẽ đi tìm cái file có tên trùng với mã thẻ. Ví dụ mình có thẻ là 123456789 thì trong dữ liệu của mình cũng có 1 file là 123456789.txt trong file đó có dạng
    1234 11/07/2016 200000
    1234 là mã PIN nếu check mã thẻ giống như tên file thì mình sẽ tiếp tục mở file ra và check mã pin (bước này mình đã làm được)
    11/07/2016 là ngày hết hạn của thẻ
    200000 là số tiền của thẻ ( mình đã lấy được nhưng mình gặp 1 vấn đề là: Khi người dùng rút tiền hoặc chuyển tiền thì file đó phải lưu lại giá trị tiền có trong thẻ, chẳng hạn mình rút 5000 trong thẻ thì số tiền còn lại là 195000 và file đó phải update lại thông tin
    1234 11/07/2016 195000
    mình chưa biết cách làm để update thông tin của file khi có người rút hoặc chuyển tiền
    Vậy, vấn đề của mình có 2 vấn đề là: làm sao để khi mình nhập 1 chuỗi “123456789” thì chương trình của mình sẽ tìm đến file có dạng “123456789.txt” được và sau khi tìm làm sao để mình mở file đó ra, cũng như làm sao để update được thông tin hay thay đổi thông số trong file 123456789.txt
    Mình xin cảm ơn! Mong bạn giải đáp cho mình qua email: chuongit.nkc@gmail.com
    Chúc bạn 1 ngày vui vẻ! Thân

  142. Võ Văn Hải said

    Duyệt qua cái bảng, lấy giá trị tại 1 ô (i,j) nào đó bằng phương thức getValueAt(i,j).

  143. ugtutorial said

    Như mình đã nói mình chưa biết về database hay bảng, bạn có cách nào khác không? Thanks

  144. Khanh said

    Em chào thầy, em có một file text a.txt có nội dung định dạng ((1,2);(3,4))
    em muốn dùng hàm split bỏ hết dấu ( ) ; chỉ lấy dữ liệu lả số 1 2 3 4 thì làm thế nào ạ

    File fileInput = new File(args[0]);
    String sep = “( ; )”;
    BufferedReader input = null;
    input = new BufferedReader(new FileReader(fileInput));
    String line = null;
    line = input.readLine();

    while ((line = input.readLine()) != null) {
    String[] columns = line.split(sep);
    }
    }

    em là như vậy mả không bỏ được mấy dấu ( ; ), mong thấy giúp em ạ.

  145. Võ Văn Hải said

    “…em có một file text a.txt có nội dung định dạng ((1,2);(3,4)) em muốn dùng hàm split bỏ hết dấu ( ) ;…”

    import java.io.FileInputStream;
    import java.util.Scanner;
    import java.util.StringTokenizer;
    
    public class DocFile {
    	void ReadFile(String fileName) throws Exception{
    		Scanner in=new Scanner(new FileInputStream(fileName));
    		while(in.hasNextLine()){
    			String line=in.nextLine();
    			processing(line);
    		}
    		in.close();
    	}
    	private void processing(String line){
    		StringTokenizer stk=new StringTokenizer(line,",();");
    			int a=Integer.parseInt(stk.nextToken());
    			int b=Integer.parseInt(stk.nextToken());
    			int c=Integer.parseInt(stk.nextToken());
    			int d=Integer.parseInt(stk.nextToken());
    			//làm gì đó với a b c d
    			System.out.println(a+", "+b+", "+c+", "+d);
    	}
    	
    	public static void main(String[] args) throws Exception{
    		DocFile f=new DocFile();
    		f.ReadFile("a.txt");
    	}
    }
    
  146. Nguyen Van Dung said

    ***Rất mong bác giúp đỡ***
    Vấn đề của em là:
    file.txt với nội dung
    1.baccascas
    2.ascascasc.
    5.ascascasc
    7.cascascas
    chèn thêm 3 dòng vào file để có được file.txt với nội dung:
    1.baccascas
    2.ascascasc.
    3.ascascasc
    4.ascascasc
    5.ascascasc
    6.ascascasc
    7.cascascas

  147. Tuan said

    Chao Thay,
    Thay cho em hoi o dau day Lap trinh Visual Basic cho Access. Em muon lam trinh cho Access ma chua lam duoc.Xin cam on thay.

  148. Trần Toàn said

    E chào thầy !
    Thầy giúp em cách duy chuyển file vào thư mục.
    ví dụ: em 3 thư mục A,B,C: Đọc 10 file vào:

    Computer -> A

    Network -> B

    Adogthn -> C

    Vd: những file nào mà tên file có chứa từ: Computer thì copy/di chuyển file đó vào
    thu mục A, tương tự vậy……

  149. vietha said

    chào thầy !
    em có 1 đoạn text như sau.
    “bùi văn tân vũ văn tâm”
    em muốn đổi vị trí của 2 từ tân và tâm trong này thì phải làm sao ạ

  150. Võ Văn Hải said

    Thầy giúp em cách duy chuyển file vào thư mục.
    ví dụ: em 3 thư mục A,B,C: Đọc 10 file vào:
    Computer -> A
    Network -> B
    Adogthn -> C
    Vd: những file nào mà tên file có chứa từ: Computer thì copy/di chuyển file đó vào
    thu mục A, tương tự vậy……

    Bạn getName của file sau đó dùng phương thức indexOf hoặc contains để kiểm tra 1 chuỗi có trong 1 chuỗi không để mà copy cho hợp lý. Thân.

  151. This excellent website really has all the information and facts I needed about this subject and didn’t know who to ask.

  152. Phạm Doanh said

    Em chào thầy,thầy cho em hỏi ạ:em đọc được file pdf từ đầu vào và bây giờ muốn lưu lại sang file text để xử lí cho dễ(như tách từ để thống kê chẳng hạn) thì làm cách nào ạ??
    Em cám ơn thầy

  153. Trần Đình Tuấn said

    Thưa thầy cho e hỏi làm sao để đọc và duyệt được cái sô trong 1 file excel vào trong eclipse ạ??
    Vd trong excel e có như sau:
    0.1 1
    0.5 4
    1 8
    1.5 10
    2 12

    Vậy mình muốn duyệt tùng column với row thì viết trong java thế nào để nó có thể đọc được các giá trị đó trong bẳng Excel ạ??
    Như mình muốn tra giá trị 0.7 ứng với ?? trong cột bên cạnh thì làm sao ?
    Mong thầy giúp đỡ (File dữ liệu là thuộc bảng Excel nhé thầy).
    Em cám ơn thầy!!

  154. Trần Đình Tuấn said

    Thầy ơi .Help me !!! :( :(

  155. linhbm said

    em chào thày , thầy ơi cho em hỏi em muốn nhập 1 file văn bản , sau đó đọc nó và đếm số từ có trong văn bản đó(hoặc đọc từ 1 file khác) thì làm thế nào hả thầy !
    em cảm ơn thầy .

  156. Hứa Tuyết Loan said

    Em chào thầy, thầy ơi cho em hỏi
    – Xây dựng chương trình đọc một tập tin input.txt , nội dung tập tin này chứa ở mỗi dòng là một họ tên. Chương trình đọc từng dòng họ tên trong tập tin input.txt và lưu vào một mảng. Gọi hàm “chuẩn hóa họ tên” để sửa lại họ tên theo đúng chuẩn họ tên của người Việt. Ghi từng ký tự trong mảng họ tên sau khi sửa vào một dòng của tập tin output.txt.
    _nen dùng hàm nào và cách dùng ra sao a

  157. Hứa Tuyết Loan said

    Thầy ơi cho em xin code bài nay:
    Xây dựng chương trình đọc một tập tin input.txt , nội dung tập tin này chứa ở mỗi dòng là một họ tên. Chương trình đọc từng dòng họ tên trong tập tin input.txt và lưu vào một mảng. Gọi hàm “chuẩn hóa họ tên” để sửa lại họ tên theo đúng chuẩn họ tên của người Việt. Ghi từng ký tự trong mảng họ tên sau khi sửa vào một dòng của tập tin output.txt.

  158. thuyle said

    Thầy ơi.thầy giúp code vs ạ.em mới bắt đầu học bên cũng chưa hiểu lắm
    Thông tin của thí sinh và quê quán có thể được lưu trữ theo nhiều cách khác nhau, trong hệ thống này, người ta yêu cầu lưu trữ dữ liệu thông qua các file “thisinh.txt” và “quequan.txt” với cấu trúc như sau:
    1. “quequan.txt”: mỗi dòng chứa thông tin
    Tên tỉnh; Mã tỉnh
    Ví dụ:
    Ha Noi; 1
    Hai Phong; 2
    2. “thisinh.txt”: mỗi dòng chứa thông tin
    Mã, Tên, Mã tỉnh, Ngày sinh, Giới tính, Toán, Lý, Hoá
    Ví dụ:
    10001; Nguyen Thi Thuy, 1, 02/10/1976, true, 7, 5, 6
    10002; Nguyen Thị Hương, 2, 03/12/1979, false, 7, 9, 8

  159. Truong said

    thầy ơi cho em hỏi với ạ, em có 1 file text có nội dung như ” 1 Tran Van A 8 9 9″ với 1 là số thứ tự, Tran Van A là họ tên, 7 8 9 là điểm của 3 môn học, làm sao để em có thể ghi lại thông tin ấy vào arrayList rồi tách ra và lấy được mã, họ tên và điểm ạ, em mong thầy chỉ giùm em với ạ. Em cám ơn thầy!

  160. Võ Văn Hải said


    class Hocsinh{
    private String hoten;
    private float toan;
    private float ly;
    private float hoa;
    public Hocsinh(String hoten,float toan,float ly,float hoa){
    this.hoten=hoten;
    this.toan=toan;
    this.ly=ly;
    this.hoa=hoa;
    }
    //các hàm setter/getter
    //...
    }

    class Test{
    public Hocsinh parseLine(String line){
    String []array=line.split(" ");
    String hoten=array[0];
    float toan=Float.parseFloat(array[1]);
    float ly=Float.parseFloat(array[2]);
    float hoa=Float.parseFloat(array[3]);
    return new Hocsinh(hoten,toan,ly,hoa);
    }
    }

  161. Gio Lanh said

    Thầy ơi, em có bài sau không biết cách giải thầy cho em cái code giải và giải thích dùm em với.
    Đề: ” hãy tạo ra n đối tượng thuộc lớp bất kì, ghi n đối tượng vào file. Hãy cho biết đối tượng có giá trị trường số nhỏ nhất, nhỏ nhì, lớn nhất và lớn nhì”
    Thầy giúp em với. Cám ơn thầy.

  162. pckone said

    thầy ơi cho e hỏi: lam s để viết chương trình tạo 1 lớp bất kì có 3 trường, tạo ra n đối tượng thuộc lớp đó rồi ghi n đối tượng dó vào file,hãy cho biết đối tượng nhỏ nhất nhỏ nhì và lớn nhì

  163. Toàn Võ said

    Em chào thầy. Thầy cho em hỏi vấn đề này:

    Em có 1 file text dạng:
    1 // 2 dòng đầu file dữ liệu tùy ý
    2
    1 3 4
    2 3 4
    1 3 5
    ….

    Em đang muốn đọc file từ dòng thứ 3 và lưu vào 1 mảng 2 chiều để tính toán (Với số lượng dòng chưa biết trước).
    Thầy giúp em với ạ, em cảm ơn thầy.

  164. Phan Quân said

    em chào thầy,thầy giúp em tách 1 từ,tách 1 câu trong văn bản có sử gói (http://nlp.stanford.edu/software/corenlp.shtml#Usage) chạy trên java và làm sao để truy vấn văn bản(văn bản được đọc vào dang file.txt)..em cảm ơn thầy.hy vong thầy giúp em với ạ!!

  165. phan quan said

    thay oi,thay giup e tach 1 tu,1 cau trong java và lam sao de truy van du lieu(du lieu dươc doc vao la file.txt).Đặc biệt có su dụng gói Stanford

  166. Thầy ơi, có thể chỉ giúp e lỗi sai ở đâu được không ạ.
    E có hàm đọc file và đưa vào mảng 2 chiều. Kết quả thì ra đúng ý của e nhưng khi e viết hàm xuất mảng thì kết quả lại sai.
    Đây là hàm đọc file của e:

    public class Path {

    private int numberOfPath = -1;
    private int n;
    private int m;
    private int[][] A;
    String[] arr = null;

    public String readFile(String fileName)
    {
    try
    {
    FileInputStream fr = new FileInputStream(“data.txt”);
    Scanner sc = new Scanner(fr);
    int i = 1;
    int so_hang = 0;
    //int tong = 0;
    while(sc.hasNextLine())
    {
    String line = sc.nextLine();
    arr = line.split(” “);
    A = new int[n][arr.length];
    if(i == 1)
    {
    m = Integer.parseInt(line);
    System.out.println(m);
    }
    else if(i == 2)
    {
    n = Integer.parseInt(line);
    System.out.println(n);
    System.out.println(“———“);
    }
    else
    {
    for(int so_cot = 0; so_cot < arr.length; so_cot++)
    {
    A[so_hang][so_cot] = Integer.parseInt(arr[so_cot]);
    System.out.print(A[so_hang][so_cot]+" ");
    //tong = tong + A[so_hang][so_cot];
    }
    System.out.println("");
    so_hang++;
    }
    i++;
    }
    //System.out.println(tong);
    System.out.println("————-");
    sc.close();
    fr.close();
    }
    catch(IOException io)
    {
    System.out.println("Khong tim thay file " + "1.inp");
    }
    return "";
    }
    public void Xuat()
    {
    for(int i = 0; i < n; i++)
    {
    for(int j = 0; j < arr.length; j++)
    {
    System.out.print(A[i][j]+" ");
    }
    System.out.println("");
    }
    }

    }
    Giả sử file data có dữ liệu là:
    3
    3
    1 2 3
    1 3 1
    2 3 2

    E cảm ơn thầy!

  167. dieuboa said

    Thầy ơi,thầy cho em hỏi em có một file text, mỗi dòng 3 số hạng, vậy thầy cho em hỏi là làm sao để mình lấy dữ liệu mỗi số ra và lưu vào arraylist được,thầy chỉ giúp em với.Em cảm ơn thầy nhiều

  168. Tran Nhat Vu said

    Thầy ơi, khi sử dụng Netbeans thì làm sao để import 1 file text vào cái projet mình đang làm vậy ?
    Vì khi mở file để đọc thì nó lại báo lỗi “java.io.FileNotFoundException: villes_35.csv (The system cannot find the file specified)”

  169. Võ Văn Hải said

    copy rồi paste vào thư mục trong project

  170. Võ Văn Hải said

    đọc từng dòng dùng Scanner phương thức nextLine() sau đó tách nó ra theo dấu phân cách rồi parse nó về kiểu số mong muốn.

  171. thoan said

    thầy cho em hỏi là làm thế nào để đọc một tệp văn bản tiếng việt và tính số lần xuất hiện các từ hoặc cụm từ trong văn bản đó.

  172. Tran Nhat Vu said

    Được rồi ạ, e cảm ơn thầy

  173. Thầy có thể demo đơn giản cho em java web thực hiện nhập từ và đưa ra nghĩa, nghĩa lấy từ file text trên máy có dạng
    forte @forte /’fɔ:ti/\n* tính từ & phó từ\n- (âm nhạc) mạnh ((viết tắt) f)\n* danh từ\n- (âm nhạc) nốt mạnh; đoạn chơi mạnh\n* danh từ\n- sở trường, điểm mạnh (của một người)\n- thân gươm (từ cán tới giữa lưỡi)
    Mỗi từ và nghĩa của nó được viết trên một dòng ạ.
    Em muốn sử dụng để tra từ trên server ạ.
    Em cảm ơn thầy.

  174. Võ Văn Hải said

    trong blog có 1 bài về thống kê tần số xuất iện của ký tự đấy, chịu khó tìm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 2,212 other followers

%d bloggers like this: