2017-03-06 1 views
1

내 응용 프로그램에서 예외가 발생합니다. java.io.FileNotFoundException : 잘못된 파일 경로입니다. 이유를 모르겠다. 주제에 대한 질문과 답변을 읽었으나 아무도 나를 도울 수 없습니다. 제 (에서 금지 된 문자를 제거 \ 사용자 LIPI \ CosmicLd.rdp잘못된 파일 경로 예외

toValidFilename을 (\)된다

String userhome = System.getProperty("user.home"); 
    String filename = null; 
    File rdp = null; 
    for (int item = 0; item < darab; item++) { 
     filename = toValidFileName(ProgramList.get(item).getP_name()); 
     filename += ".rdp"; 
     rdp = new File(userhome, filename); 
     try { 
      JFrame panel; 
      panel = new JFrame(); 
      panel.setSize(400, 10); 
      panel.setLocation(300, 400); 
      panel.setTitle("Saving " + rdp.getAbsolutePath()); 

      try (FileOutputStream fstr = new FileOutputStream(rdp)) { 
       panel.setVisible(true); 
       char c; 
       for (int j = 0; j < 2336; j++) { 
        c = ProgramList.get(item).p_body.charAt(j); 
        fstr.write(c); 
       } 
       fstr.flush(); 
       fstr.close(); 
       panel.setVisible(false); 
      } 

     } catch (IOException ioe) { 
      JOptionPane.showMessageDialog(this, 
        ioe.getMessage(), "Save rdp file", JOptionPane.ERROR_MESSAGE); 
      System.err.println(ioe.getMessage() + " : "+ rdp.getAbsoluteFile()); 
     } 
    } 

그리고 결과 : 잘못된 파일 경로 : C 여기

코드입니다 KORG RADIAS) 프로그램 이름을 사용하여 유효한 파일 이름을 만듭니다.

내가 대상 디렉토리는 사용자가 필요한 privilegs를 가지고 읽을 수 없습니다입니다 내 잘못 :( 를 찾을 수없는 한 나는 줄 뒤에()를 file.canWrite을 볼 때 :. RDP = 새로운 파일 (USERHOME, 파일 이름) 그것의 항상 false 내가 무슨 짓을 잘못 감사

+0

파일 선택기로 파일을 선택하면 작업이됩니다. –

+1

스택 추적 및 toValidFileName 코드를 게시 하시겠습니까? – efekctive

+0

동일한 파일을 파일 선택기로 선택하고 파일 이름을 인쇄하십시오. 실패한 이름과 이름을 비교하십시오. 공백을주의하십시오. – Arkadiy

답변

0

filewriter 대신 사용해보십시오 귀하의 시도는 다음과 같이 표시됩니다, 또한

try { 
    File dir = new File("C:/Users//" + userhome + "/Documents"); //customize this however 
    FileWriter fstr = new FileWriter(new File(dir, rdp)); 
      for (int j = 0; j < 2336; j++) { 
       c = ProgramList.get(item).p_body.charAt(j); 
       fstr.write(c); 
         } 
      fw.close(); 
     } 

을 자바 변수 명명에 충실하려고합니다.?!. userhome은 userHome 등으로해야합니다. Ju 일 사소한 일 : 문제는 그 라인에서 생성 된

+0

왜 이런 상황에서 도움이 될 것이라고 생각하십니까? – matt

+0

필자는 필자 자신이 논리적이고 직설적이라는 것을 증명했다. 최선의 방법은 코드가 올바른 경로를 생성하거나 읽지 않는다는 것이기 때문에 간단한 입력으로 문제를 해결할 수 있기를 바랍니다. – Jerevand

0

: 때때로있다 렸기 때문에 (문자)를 getP_name() 결과

filename = toValidFileName(ProgramList.get(item).getP_name()); 

, 0 문자 ...

코드 다시 작성됩니다 -> (문자) 0 문자가 객체의 20 문자 (문자) 20 문자로 변경되고 모든 방식이 작동합니다.

toValidFileName 코드는 어쨌든이 :

public static String toValidFileName(String input) { 
    return input.replaceAll("[:\\\\/*\"?|<>']", "_"); 
} 

는 당신의 도움에 대해 감사합니다! 특히 Arkady 's와 VGR의 조언과 같은 유용한 조언이 있습니다!