2010-07-22 7 views
4

나는 안드로이드 개발에 초보자입니다. 나는 파일에 무언가를 쓰려고 노력한다. 나는 코드를 사용하고 있습니다 :안드로이드는 파일에 쓰기 - 파일을 찾을 수 없습니다

try { 
        FileOutputStream fOut = openFileOutput(
          "out.txt", MODE_WORLD_READABLE); 

        OutputStreamWriter osw = new OutputStreamWriter(fOut); 
        osw.write("something"); 
        osw.flush(); 
        osw.close(); 
        fOut.close(); 

       } catch (MalformedURLException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } catch (IOException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } 

다 괜찮아요하지만 난 DDMS 파일 탐색기에서 파일을 찾을 수 없습니다. Android가 파일을 저장하는 위치를 알려주시겠습니까? "/ data/data/my_project_package"에 없습니다. 감사합니다.

답변

5

1) 매니페스트이를 알고 있어야합니다 :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

2) 에뮬레이터 또는 장치 중 하나를 테스트, 차이가 있습니다. 후자의 경우 PC에서 장치를 분리하십시오 (선택 : "만 충전 중"). 디버깅은 여전히 ​​그런 식으로 작동합니다. 동시에 쓰고 볼 수없는 것입니다.

이 방법은 작동합니다

public void writeToExternalStoragePublic(String filename, int content) { 
    String packageName = this.getPackageName(); 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/" + packageName + "/files/"; 
    if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { 
     try { 
      boolean exists = (new File(path)).exists(); 
      if (!exists) { 
       new File(path).mkdirs(); 
      } 
      // Open output stream 
      FileOutputStream fOut = new FileOutputStream(path + filename,true); 
      // write integers as separated ascii's 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      // Close output stream 
      fOut.flush(); 
      fOut.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

나는이 코드를''와 함께 사용하려고 시도했다. 'new FileOutputStream' 줄에 여전히'FileIOException (java.io.FileNotFoundException : /mnt/sdcard/Android/data/com.foo/files/This.html : open failed : EACCES (Permission denied))'메시지가 나타납니다. 나는 무엇을 놓칠 수 있 었는가? 나는 에뮬레이터에서 실행 중이다. 나는'File (path) .mkdirs()'가 예외를 던지지 않는다는 것에 주목한다. 그것은 dir을 생성하지 않습니다. –

1

이 주제와 디바이스의 스토리지가 장착되는 AndroidManifest.xml II)에 권한을 요청하지 자주 졸이다 것 같다 문제)에 대한 많은 질문이있는 것 같습니다 응용 프로그램을 실행하고 있던 시점의 컴퓨터 또는 iii) 에뮬레이터 설정.

이 솔루션을 모두 사용해 보았지만 실패한 다른 사용자가 나에게 제출하기를 바란다. 컴퓨터는 다른 컴퓨터에서 작성된 소스 저장소에서 코드를 가져온 후 AndroidManifest.xml에서 사용자의 허가 설정을 임의로 무시하기로 결정합니다. 제 경우에는 외부 저장소에 쓴 컴퓨터 A에 코드를 작성했습니다. 나는 코드를 소스 제어로 확인한 다음 컴퓨터 B로 코드를 가져 왔습니다. 컴퓨터 B에서 응용 프로그램으로 장치를 다시 설치하면 권한이 거부 된 예외가 발생하기 시작했습니다.

수정 : 컴퓨터 B에 AndroidManifest.xml 파일에 대한 변경 (예를 들어 어딘가에 줄 바꿈을 삽입) 합니다. 이 문제가 해결되었습니다. 나는 이유를 모른다. 그것은 드문 사례 중 하나 일지 모르지만 더 실망스러운 사례 일 것입니다.

1

매니페스트에 <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE">을 입력하십시오.

Here입니다.

+0

이 권한은 시스템 앱에만 해당됩니다 ... –

관련 문제