2016-10-18 2 views
0

SQLite Database App에 대한 백업/복원 (내보내기/가져 오기) 프로세스를 만드는 중입니다.외부에서 만든 파일에 어떻게 액세스합니까? 파일이 어디 있니?

필자는 파일을 생성하여 채 웠지만 (이제 알았습니다.) DDMS 나 Windows 탐색기에서 파일을 볼 수 없습니다. 나는 정말로 후자를 할 수 있기를 바란다. (더 구체적인 질문은 아래를 보라).

는 내가 성공적으로 파일을 작성하고 다음 코드를 사용하여 파일을 읽은

: 앱 실행이 실패 설치할 때 쇼 (필터로 외부 입력을 사용하여) 로그

package mjt.sqlitetutorial; 

     import android.database.Cursor; //+++++ Added 
     import android.os.Build; 
     import android.os.Environment; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.util.Log;  //+++++ Added 

     import java.io.BufferedOutputStream; 
     import java.io.BufferedReader; 
     import java.io.File; 
     import java.io.FileInputStream; 
     import java.io.FileOutputStream; 
     import java.io.FileReader; 
     import java.io.IOException; 
     import java.io.InputStreamReader; 
     import java.io.OutputStreamWriter; 



public class MainActivity extends AppCompatActivity { 

    public int API_VERSION = Build.VERSION.SDK_INT; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (API_VERSION >= 23) { 
      ExternalStoragePermissions.verifyStoragePermissions(this); 
     } 

     final String EXTSTGTAG = "EXTERNSTG"; 

     File file = getExternalFilesDir("File"); 
     Log.i(EXTSTGTAG,file.toString()); 
     //String extstgdirabs = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     String extstgdirpth = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); 
     Log.i(EXTSTGTAG,"<=\nEXTERN STG PUB DIR=>" + extstgdirpth); 
     String filepath = extstgdirpth + File.separator + "myfile.txt"; 
     Log.i(EXTSTGTAG,"Full File Path and name is\n\t" + filepath); 

     File f = new File(filepath); 
     if(!f.exists()) { 
      Log.i(EXTSTGTAG,"File did not exist (path=" + filepath + ")"); 
      try { 
       f.createNewFile(); 
      } 
      catch (IOException e) { 
       Log.e(EXTSTGTAG,"Failure Creating New File MSG=" + e.getMessage()); 
      } 
     } 
     if(f.exists()) { 
      Log.i(EXTSTGTAG,"File Already Exists (" + filepath + ")"); 
      try { 
       Log.i(EXTSTGTAG,"Creating FileOutputStream instance."); 
       FileOutputStream fos = new FileOutputStream(f); 
       Log.i(EXTSTGTAG,"Creating OutputStreamWriter instance from FileOutputStream."); 
       OutputStreamWriter osw = new OutputStreamWriter(fos); 
       Log.i(EXTSTGTAG,"Adding Data to OutputStreamWriter."); 
       osw.append("My Test Data."); 

       Log.i(EXTSTGTAG,"Closing OutputStreamWriter."); 
       osw.close(); 
       Log.i(EXTSTGTAG,"Flushing FileOutputStream."); 
       fos.flush(); 
       Log.i(EXTSTGTAG,"Closing FileOutputStream"); 
       fos.close(); 
       Log.i(EXTSTGTAG,"All Done OK."); 
      } catch (IOException e) { 
       Log.e(EXTSTGTAG, "Failure Trying to write to file." + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } else { 
      Log.i(EXTSTGTAG,"File doesn't appear to exist when it should????"); 
     } 
     f.setReadable(true); 
     f.setWritable(true); 
     if(f.exists()) { 
      try { 
       byte[] bytes; 
       FileInputStream fis = new FileInputStream(f); 
       InputStreamReader isr = new InputStreamReader(fis); 
       BufferedReader br = new BufferedReader(isr); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while((line = br.readLine()) != null) { 
        sb.append(line).append("\n"); 
       } 
       br.close(); 
       Log.i(EXTSTGTAG,"Read the following data:\n" + sb.toString()); 
      } 
      catch (IOException e) { 
       Log.e(EXTSTGTAG,"Failure trying to read file." + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 

    } 
} 

출력 (첫 번째 실행에주의 .하지만 요청과 세트 권한은)이이 문제/원인이라고 생각하지 않습니다 -

10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: /storage/emulated/0/Android/data/mjt.sqlitetutorial/files/File 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: <= 
               EXTERN STG PUB DIR=>/storage/emulated/0/Download 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Full File Path and name is 
               /storage/emulated/0/Download/myfile.txt 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: File Already Exists (/storage/emulated/0/Download/myfile.txt) 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Creating FileOutputStream instance. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Creating OutputStreamWriter instance from FileOutputStream. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Adding Data to OutputStreamWriter. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Closing OutputStreamWriter. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Flushing FileOutputStream. 
10-18 12:54:40.159 32393-32393/? I/EXTERNSTG: Closing FileOutputStream 
10-18 12:54:40.169 32393-32393/? I/EXTERNSTG: All Done OK. 
10-18 12:54:40.169 32393-32393/? I/EXTERNSTG: Read the following data: 
               My Test Data. 

는 파일 (I 가정)을 읽는 것을 나타내는 마지막 줄. 제공된 메시지 중에는 다른 로그 메시지가 없습니다 (이전과 이후의 많은 메시지).

내가 테스트하고있는 장치는 SD 카드가있는 비 루팅 HTC One M8입니다. 그러나 /storage/emulated/0/Download, 파일이 기록되는 디렉토리가 내부 메모리에 있다고 생각합니다.

DDMS를 사용하면이 파일을 볼 수없는 것으로 보입니다 (실제 SD 카드의 다운로드 디렉토리는 입니다).

윈도우 탐색기에서 나는 HTC_0PKV1 장치에서 장치 등을 모두 내부 저장SD 카드을 볼 수 있습니다.

Windows 탐색기에서 다운로드 디렉토리에는 등록 정보를 통해 0 개의 디렉토리 및 파일이 있습니다. 읽기 전용이나 숨김이 표시되지 않습니다.

나는 setReadablesetWritable()이있는 경우와없는 경우 모두 시도했습니다.

방금 ​​전화로 파일 관리자를 사용해 보았습니다. 이제 파일을 볼 수 있습니다. 더 구체적으로 말하면 질문은 다음과 같습니다. Windows 탐색기를 통해 파일에 액세스하기 위해 전화를 뿌리 뽑고 전화상의 파일 관리자를 통해 파일을 옮기는 방법이 있습니까?

또한 앱이 태블릿에서 실행되므로 메소드가 기기에 고유하지 않고 일반 텍스트 여야한다고 명시해야합니다.

답변

0

USB 케이블을 분리했다가 다시 연결 한 후 파일이 Windows 탐색기에 표시됩니다. 나는이 방법 MTP가 작동하기위한 것입니다 있는지 확실하지 않습니다 또는 아마도 ADB 때문에이 코드에 따라 될 수있다 : -

그러나, 당신이 이제까지와 같은 설치 에 대한 사용자의 장치의 잠금을 해제하려고 한 경우 새로운 ROM 또는 루트를 설치했다면 컴퓨터에 ADB (Android Debug Bridge) 드라이버가 설치되어있을 수도 있습니다. 이 드라이버는 컴퓨터를 사용하여 기기에 명령을 전송할 수 있다는 점에서 뛰어나지 만 사용자가 쉽게 파일을 조작 할 수 있습니다.

How to Get Your Android Device to Show up in File Explorer (If It Isn’t)

에서 발견
관련 문제