2012-09-19 3 views
0

Annoyingly 나는 아래 코드를 작성하여 sdcard의 파일에 쓰고 코드를 계속 개발했습니다. 그러나 나는 지금 바뀌지 않았기 때문에 뭔가를 바꿨을 것입니다.SD 카드에 파일 작성 및 쓰기

길고 성가신 날 이었으므로 누군가 내가 간단한 실수를 지적 할 수 있는지 궁금해하고있었습니다. 난 당신이 "/sdcard/" 대신 "sdcard/"이 있어야합니다 생각

09-19 17:58:16.270: W/System.err(10411): java.io.IOException: open failed: ENOENT (No such file or directory) 
09-19 17:58:16.275: W/System.err(10411): at java.io.File.createNewFile(File.java:940) 
09-19 17:58:16.275: W/System.err(10411): at android.Maps.GeneticAlgorithm3.shufflePerm3(GeneticAlgorithm3.java:192) 
09-19 17:58:16.275: W/System.err(10411): at android.Maps.HomeScreen$6.onClick(HomeScreen.java:334) 
09-19 17:58:16.275: W/System.err(10411): at android.view.View.performClick(View.java:4084) 
09-19 17:58:16.275: W/System.err(10411): at android.view.View$PerformClick.run(View.java:16966) 
09-19 17:58:16.275: W/System.err(10411): at android.os.Handler.handleCallback(Handler.java:615) 
09-19 17:58:16.275: W/System.err(10411): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-19 17:58:16.275: W/System.err(10411): at android.os.Looper.loop(Looper.java:137) 
09-19 17:58:16.275: W/System.err(10411): at android.app.ActivityThread.main(ActivityThread.java:4896) 
+0

sdcard 경로를 하드 코드해서는 안됩니다. Environment.getExternalStorageDirectory(). getAbsolutePath() –

+0

대부분의 장치에서 전체 경로 이름은 '/ mnt/sdcard /'입니다. 이것이 일반적으로 getExternalStorageDirectory()에 의해 반환됩니다. 대부분의 새 장치에서 이것은 내장 된 저장소입니다. 대부분의 기기에서 Android 기기를 통해 이동식 기기를 사용할 수 없습니다. 너는 너의 것을 굴려야 해. Galaxy S3은/mnt/extSdCard를 사용하고 Galaxy Note (1은 2가 아님)는/mnt/sdcard/external_sd를 사용합니다. 다른 장치는 다른 경로 이름을 사용합니다. 원한다면 모든 sdcards를 스캔 할 수업을 게시 할 것입니다. –

답변

0

: 여기

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy/hh-mm-ss"); 
Date curDate = new Date(); 
String stringDate = sdf.format(curDate); 
String resultLogFile = "logFile " + stringDate; 

File newFile = new File("sdcard/" + (resultLogFile)); 
if (!newFile.exists()) { 
    try { 
     newFile.createNewFile(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
try { 
    BufferedWriter buf = new BufferedWriter(new FileWriter(newFile, true)); 
    buf.append(writeToFileString); 
    buf.newLine(); 
    buf.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

는 콘솔입니다.

+0

슬프게도 운이 없다, 다른 건 – MurphyApps

+0

또한'SimpleDateFormat'에서 사용 된'/'을 생략 할 수 있습니까? –

+0

이제는/mnt/sdcard –

0

SD 카드 위치는 제조 업체에 따라 다릅니다. IDE와 함께 전화를 사용할 때 USB 대용량 저장 장치를 선택하고 USB 연결을 위해 없음을 선택할 수 있습니다. 당신이 앱 :)에 사용할 수없는 SD 카드에 비해 USB 대용량 저장을 선택하면

나는 샘플 코드를 사용하고

그것을 확인 :

boolean mExternalStorageAvailable = false; 
     boolean mExternalStorageWriteable = false; 
     String state = Environment.getExternalStorageState(); 

     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      // We can read and write the media 
      mExternalStorageAvailable = mExternalStorageWriteable = true; 
     } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      // We can only read the media 
      mExternalStorageAvailable = true; 
      mExternalStorageWriteable = false; 
     } else { 
      // Something else is wrong. It may be one of many other states, but 
      // all we need 
      // to know is we can neither read nor write 
      mExternalStorageAvailable = mExternalStorageWriteable = false; 
     } 

     if (mExternalStorageAvailable && mExternalStorageWriteable) { 
      doWriteForExternalStorage(); 
     } else { 
      Log.d(TAG, "mExternalStorageAvailable: " + mExternalStorageAvailable + ", mExternalStorageWriteable: " + mExternalStorageWriteable + " it is Connected to PC now?"); 
     } 

@SuppressWarnings("unused") 
    private void doWriteForExternalStorage() { 
     // TODO Auto-generated method stub 
     File extDir = Environment.getExternalStorageDirectory(); 
     Log.d(TAG, "extDir:" + extDir.getAbsolutePath()); 
     if (extDir.isDirectory() && extDir.canWrite()) { 
      File fileData = new File(extDir, "mydata.txt"); 
      Log.d(TAG, "want to create file: " + fileData.toString()); 
      FileOutputStream fos = null; 
      try { 
       boolean append = true; 
       fos = new FileOutputStream(fileData, append); 
       BufferedOutputStream bos = new BufferedOutputStream(fos, 8192);// 8kbyte 
                       // buff, 
                       // it 
                       // should 
                       // be 
                       // plenty 

       StringBuilder sb = new StringBuilder("\n"); 
       List<RunningTaskInfo> runningTasks = activityManager.getRunningTasks(100); 

       if (runningTasks != null) { 
        for (RunningTaskInfo runningTask : runningTasks) { 
         sb.append("runningTask: ").append(runningTask.baseActivity.getPackageName()).append(", ").append(runningTask.baseActivity.getClassName()); 
        } 
       } else { 
        sb.append("No running tasks"); 
       } 
       byte[] data = sb.toString().getBytes(); 
       bos.write(data); 
       bos.flush(); 


          bos.close(); 
      fos = null; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (fos != null) { 
       try { 
        fos.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

로를 서비스 로그

1

사용해보십시오 :

File newFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + (resultLogFile)); 
타임 스탬프를 들어

, 당신은 그것을 얻기 위해 다음을 사용하고 이름의 끝에 추가 할 수 있습니다 :

public String date() { 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd_hh:mm:ss"); 
     df.setTimeZone(TimeZone.getTimeZone("PST")); 
     return df.format(new Date()); 
} 
또한

, 당신은에 USB를 통해 SD 카드를 장착하지 않은 있는지 확인하여 컴퓨터 등을 설치하면 앱을 사용할 수 없게됩니다.

+0

을 시도하여 파일을 생성 할 수 있지만 파일 이름 끝에 타임 스탬프를 추가하는 방법이 궁금합니다. 나는 문자열 resultsLogFile 또는 stringDate를 추가 할 수 있다고 생각했다. 어떤 아이디어? – MurphyApps

+0

@MurphyApps 제 편집 내역보기 –

+0

미안하지만 하루가 지나지 않아서 파일 이름에이 부분을 어디에 추가합니까? – MurphyApps

관련 문제