วันพุธที่ 18 มกราคม พ.ศ. 2555

How to Solve java.io.FileNotFoundException: (Access is denied)

        หลาย ๆ คนคงเคยเขียน java เกี่ยวกับการ Execute, Read, Write ไฟล์กันมาบ้างแล้ว สำหรับคนที่ Run บน Linux หรือ Window XP ก็คงจะไม่เคยเจอปัญหานี้ แต่ถ้าได้ลองนำ Source Code ไป Run บน Windows 7 ดูสิครับ เกิดเรื่องเลยครับทีนี้ เนื่องจากติดปัญหาเรื่อง Permission ใน Windows7 วิธีแก้ก็คือไปคลิกขวาที่ C:/ หรือที่ Folder แล้วก็เข้าไปกำหนดสิทธิ์ให้กับ user นั้น ๆ กรณีที่รันเป็น Administrator ก็จะไม่พบเจอปัญหานี้เช่นกัน
        แต่อย่างไรก็ตาม ในคลาสของ  java.io.File มี Method setExecutable, setReadable, setWritable เดี๋ยวจะลองเขียน Code ตัวอย่างดูนะครับ

ลอง check สิทธิ์ด้วยคลาส CheckPermission
 import java.io.FilePermission;  
 import java.security.AccessController;  
 /**  
  *  
  * @author Kotcharit  
  */  
 public class CheckPermission {  
   public static void main(String[] args) {  
     try {  
       AccessController.checkPermission(new FilePermission("C:\\", "read,write"));  
       System.out.println("You have permission : ^-^");  
     } catch (SecurityException e) {  
       System.out.println("You don't have permission : T_T");  
     }  
   }  
 }  

ลองทำตาม Code นี้
 import java.io.BufferedWriter;  
 import java.io.File;  
 import java.io.FileOutputStream;  
 import java.io.OutputStreamWriter;  
 /**  
  *  
  * @author Kotcharit  
  */  
 public class WritePermissionFile {  
   public static void main(String[] args) {  
     FileOutputStream outputFileStream = null;  
     OutputStreamWriter streamWriter = null;  
     BufferedWriter bufferedWriter = null;  
     try {  
       /*สร้างไฟล์ Test Permission.txt เปล่า ๆ ไว้ที่ C:/ ไดเร็กทอรี่*/  
       File config = new File("C:/Test Permission.txt");  
       /*----Set ค่าให้เป็น true ---*/  
       config.setExecutable(true);  
       config.setReadable(true);  
       config.setWritable(true);  
       /*-------------------------*/  
       outputFileStream = new FileOutputStream(config);  
       streamWriter = new OutputStreamWriter(outputFileStream);  
       bufferedWriter = new BufferedWriter(streamWriter);  
       bufferedWriter.write("Test write permission file");  
       System.out.println("Success");  
     } catch (Exception e) {  
       System.out.println("Error : " + e.getMessage());  
     } finally {  
       try {  
         bufferedWriter.flush();  
       } catch (Exception e) {  
       }  
       try {  
         bufferedWriter.close();  
       } catch (Exception e) {  
       }  
       bufferedWriter = null;  
       streamWriter = null;  
       outputFileStream = null;  
     }  
   }  
 }  

        เพียงแค่นี้เราก็แก้ปัญหาเรื่อง Access is denied ได้แล้ว ลองนำไปประยุกต์กันดูนะครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น