2013-07-31 1 views
0
public void onClick(View v) { 
    // Writing data to file 
    FileWriter fw; 
    try { 
     fw = new FileWriter(Environment.getExternalStorageDirectory()+"/DataLog.csv", true); 

     BufferedWriter br = new BufferedWriter(fw); 
     br.append(formattedDate + String.valueOf(location.getLatitude()) + 
       ";" + String.valueOf(location.getLongitude()) + 
       ";" + String.valueOf(location.getSpeed()) + 
       ";" + String.valueOf(location.getBearing()) + 
       ";" + String.valueOf(location.getAltitude()) + 
       ";" + String.valueOf(location.getAccuracy())); 
     br.append("\r\n"); 
     br.close(); 
     fw.close(); 

     // MediaScanner scans the file 

     MediaScannerConnection.scanFile(MainActivity.this, new String[] {fw.toString()} , null, new MediaScannerConnection.OnScanCompletedListener() { 

       @Override 
       public void onScanCompleted(String path, Uri uri) { 
       Toast t = Toast.makeText(MainActivity.this, "Scan comlete", Toast.LENGTH_LONG); 
       t.show(); 
       } 
       }); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

sd 루트의 DataLog.csv 파일에 데이터를 쓰려고했습니다. 코드는 데이터로 파일을 생성하지만 sdcard를 탐색 할 때 Windows에서 파일을 볼 수 없습니다. this 비디오를 보았지만 지시 사항을 따르지만 제대로 작동하지 않습니다. 아마도 fw 변수가 파일을 정의하기에 좋지 않을까요?MediaScannerConnection이 작동하지 않습니다.

File csv = new File (Environment.getExternalStorageDirectory(), "DataLog.csv"); 

        MediaScannerConnection.scanFile(
          MainActivity.this, 
          new String[] {csv.getAbsolutePath()}, 
          null, null); 

나는이 같은 조언을 시도했지만 여전히 아무것도하지 않습니다.

답변

0

toString() (FileWriter)은 파일에 대한 경로를 반환하지 않으며, 두 번째 매개 변수는 scanFile()으로 전달됩니다.

+0

고맙습니다! 나는 이것을 시도했다 :'Environment.getExternalStorageDirectory() + "DataLog.csv"'그것은 효과가 없다. 나는 pogramming에서 "새로운 사람"입니다. 스캔 파일의 경로를 어떻게 알 수 있습니까? – user2628458

+0

@ user2628458 : 연결을 사용하여 파일 경로를 만들지 않겠습니다. 적절한'File' 생성자를 사용하십시오 :'new File (Environment.getExternalStorageDirectory(), "DataLog.csv")'. 그런 다음'getAbsolutePath()'를 호출하여 경로를 문자열로 가져올 수 있습니다. 또한 Windows에서 파일 데이터를 캐시하는 경우가 있으므로 변경 사항을 확인하려면 장치를 Windows 볼륨으로 마운트 해제하고 다시 마운트해야 할 수도 있습니다. – CommonsWare

+0

질문 하단을보십시오. 내가 잘못 했니? Android 2.3.3을 사용하면 문제가 될 수 있습니까? – user2628458