2011-11-22 2 views
0

C : \ 드라이브에 파일을 쓰려고하는데 예외가 생깁니다.Java 데스크톱 앱이 C : 드라이브에 파일을 쓸 수 없습니다.

java.io.IOException : 액세스가 거부되었습니다.

코드 :

public class Test { 

    public static void main(String[] args) { 
     try { 
      StringBuilder sb = new StringBuilder(File.separator); 
      sb.append("index.txt"); 
      // sb is "\\index.txt" 
      File f = new File(sb.toString()); 
      boolean isCreated = f.createNewFile(); 
      System.out.println(isCreated); 
     } catch (IOException ex) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

는 사실, 난 그것을 얻을, 나는 거기에 파일을 쓸 수있는 권한이 없습니다,하지만 난 어떻게 든 할 수 있습니다 확신합니다. 애플릿을 가지고 있다면, 나는 허가를 얻지 만, 여기에서는 어떻게해야할지 모른다.

가능성있는 해결책은 파일을 쓸 수 있는지 확인하는 것일 수 있지만 파일을 쓰려면 먼저 파일을 쓰고 파일을 쓸 수 있는지 확인해야합니다. 이 솔루션이 최적의 방법이라고 생각하지 마십시오.

+0

파일 경로를 정의하기 위해 구분 기호를 사용할 필요가 없습니다. "/index.txt"는 Windows와 Unix에서 모두 작동합니다. –

답변

1

난 당신이 거기에 파일을 쓸 수 있는지하는 디렉토리에 문자열을 사용하는 방법, 및 수표를 작성했습니다 :

static boolean canWrite(String folderPath) { 
    File file = new File(folderPath); 
    String new_file = "HastaLaVistaBaby"; 
    if (file.isDirectory()) { 
     try { 
      new File(file + "\\" + new_file).createNewFile(); 
     } catch (IOException e) { 
      return false; 
     } 
     new File(file + "\\" + new_file).delete(); 
     return true; 
    } else { 
     return false; 

    } 
} 

그것을 개선하기 위해, 당신은 확인할 수를 여부를 file.isFile () 부모 디렉토리를 가져 와서이 메소드를 호출하십시오.

2

가장 쉬운 방법은 File.canWrite()을 사용하는 것입니다.

당신이 드라이브의 루트에 쓰고있는 것처럼 보입니다. Windows에서는 아마 좋은 생각이 아니므로 다른 곳에서 쓰기를 고려할 수도 있습니다. a temp dir.

+0

사용자가 앱을 쓰고 싶어하는 파일을 작성하려하지만, 내가 알기로는 선택한 장소에 글을 쓸 수 있는지 여부와 관계없이 사용자에게 즉각적인주의를 기울여야합니다. – Benjamin

0

이 행은 다음과 같습니다

sb.append("C:\\index.txt"); 

여분의 백 슬래시는 백 슬래시를 이스케이프합니다.

파일 이름을 하드 코딩 했든, 내가했던 것처럼 파일 이름을 얻었는지간에 전체 경로와 파일 이름이 필요합니다.

관련 문제