2013-01-24 2 views
1

혼란 : 질문에 투표를 거절 한 사람들은 몇 가지 의견을 추가 할 수 있습니까? 나는 나쁜 말을하고 싶다. 금지 당하고 싶다.폴더로 파일을 만듭니다

나는 앱을 가지고 있으며 사용자가 물건을 추가하고 앱 안에서 사용할 수 있도록 sdCard에 폴더를 갖고 싶습니다. 내가 폴더를 만들려면 다음 코드를 사용합니다

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //External storage 
     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; 
      Log.v("Storage","ablo to read and write"); 
      //create Beatss folder 
      File direct = new File(android.os.Environment.getExternalStorageDirectory().getPath() + "/Beatss"); 
      Log.v("Storage",android.os.Environment.getExternalStorageDirectory().getPath() + "/Beatss"); 
       boolean success = true; 
       if (!direct.exists()) { 
        success = direct.mkdirs(); 

       } 
       if (success) { 
        // Do something on success 
        Log.v("Storage","Folder has been created"); 

       } else { 
        // Do something else on failure 

       } 

     } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      // We can only read the media 
      mExternalStorageAvailable = true; 
      mExternalStorageWriteable = false; 
      Log.v("Storage","ablo to read only"); 
     } else { 

      mExternalStorageAvailable = mExternalStorageWriteable = false; 
      Log.v("Storage","no access");    
     } 

내가 폴더가 생성 된 것을 DDMS에서 볼 수 있지만 내가 WindowsExplorer을 통해 갈 때 내가 대신 폴더의 파일이 있습니다. 폴더를 만드는 방법은?

UPD1 : 그럼에도 불구하고이 폴더 안에 뭔가를 만들었더라도 여전히 Windows 탐색기에 파일로 저장되어 있지만 DDMS에서는 폴더가 있고 다른 폴더에 있음을 알 수 있습니다. 그래서, 여기서 무엇이 잘못 되었습니까 ??

UPD2는 :

01-24 21:14:04.368: V/Storage(12116): /mnt/sdcard/Beatss/ 

그래서이 ..

UPD3을 : 그래서 실제 경로가 있는지 로그 캣에서 direct 라인을 breaked 나는 그것이 264입니다 내 모든 코드를 보여 질수 지금까지 선. 이 모든 폴더 생성은 mainActivity의 onCreate에서 발생합니다. manifestFile은 다음과 같습니다 : 상단

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="uk.test 
android:versionCode="1" 
android:versionName="1.0" 
android:installLocation="auto" > 

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="16" /> 
<supports-screens   
       android:smallScreens= "true" 
       android:normalScreens="true" 
       android:largeScreens="true" 
       android:xlargeScreens="false"     
/> 


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

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:screenOrientation="portrait" 
    > 
    <activity 
     android:name=".Main" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:clearTaskOnLaunch="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name="com.google.ads.AdActivity" 
       android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>   
    <activity android:name=".MainActivity" 
       android:label="@string/app_name" 
       android:screenOrientation="portrait"> 
    </activity> 
    <activity android:name=".SupportScreen" 
       android:label="@string/app_name" 
       android:screenOrientation="portrait"> 
    </activity> 
     <activity android:name="com.tapjoy.TJCOffersWebView" android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="com.tapjoy.TapjoyFullScreenAdWebView" android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="com.tapjoy.TapjoyDailyRewardAdWebView" android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="com.tapjoy.TapjoyVideoView" android:configChanges="keyboardHidden|orientation" /> 

</application> 
</manifest> 

업데이트 코드 :

로그 캣은 말한다 : 여기에있는 응용 프로그램에서 코드 조각의

01-24 21:19:21.068: V/Storage(14088): /mnt/sdcard/Beatss/ 
01-24 21:19:21.138: V/Storage(14088): Folder has been created 
+0

"폴더"안에 파일을 만들거나 나중에 "direct.isDirectory()"를 확인하면 어떻게됩니까? ;) – ConcurrentHashMap

+1

지금까지 시도한 적이 없다 ... 흥미 롭다. – Daler

+3

주의 사항 - sdcard 전체에 12 개의 디렉토리가있는 sdcard를 찾은 사용자를 피하지 말고'/ sdcard/Android/my .pkg.name/.....'최종 사용자가 쉽게 정리할 수 있도록 필요에 따라 ...;) – t0mm13b

답변

2

이 그것을

String PATH = Environment.getExternalStorageDirectory()+"/Folder123/"; 
      File file = new File(PATH); 
      file.mkdirs(); 
+0

폴더를 만들지 만 WindowsExplorer를 통해 폴더를 볼 수 없습니다. 지금 당장 가지고있는 것과 같은 상황이 도움이되지 않습니다. – Daler

+0

위의 설명과 같은 기술을 사용하는 답변으로 작업 코드를 추가했습니다. 이 코드는 게시 된 작업 코드와 동일한 기술을 사용하기 때문에 작동합니다. 이동식 SD 카드가있는 장치에는 두 개의 SD 카드가 있다는 점에 유의하십시오. Windows 탐색기는 장치 및 카드와 같은 이름의 두 개의 디렉토리를 표시합니다. getExternalStorageDirectory()는 이동식 SD 카드 디렉토리가 아닌 장치를 반환합니다. –

+0

감사합니다. 다른 방법이 있습니까? –

0

시도 생산 ....

if (spaceAvailable > spaceRequired) { 
     databasePath = new File(settingsDatabasePath, GC.APP_DIRECTORY); 
     databasePath.mkdirs(); 
     settingsDatabasePath = databasePath.getPath().toString(); 
    } 

settingsDatabasePath는 앱을 처음 설치할 때 결정됩니다. 장치에 외부 저장소가 있는지 여부에 따라 외부 저장소 또는 내부 저장소가 될 수 있습니다. 또한이 스 니펫 이전에는 GC.APP_DIRECTORY (GC 클래스의 문자열 상수)가 아직 작성되지 않았 음이 판별되었습니다. 또한이 스니 j이 끝나면 디렉토리가 작성되었는지, 쓰기가 가능한지, 디렉토리인지 확인하기위한 테스트가 수행됩니다. 데이터베이스 및 파일은 루트 디렉토리의 '튀김'파일로부터 지키기 위해 app 디렉토리에 생성됩니다.

참고 : settingsDatabasePath는 의도적으로 작성되었습니다. 코드를 복사하면 덮어 쓰기를하고 싶지 않을 수 있습니다.

+0

실제로이 코드의 절반을 넣으시면 유용합니다. 처음은 어디입니까? 나는 그 신의 망할 폴더를 만드는 방법을 많이 피곤했지만 폴더 대신 파일을 만듭니다. – Daler

+0

키 코드는 gabrielaugustodm과 중복됩니다. mkdirs()를 사용하면 전체 디렉토리 문자열을 생성합니다. mkdir()은 기존 디렉토리 트리의 마지막 디렉토리 만 작성합니다. 실패하면 둘 다 false를 반환합니다. 어느 쪽도 파일을 만들지 않습니다. 디렉터리의 수준에서 기존 파일과 이름이 같은 디렉터리를 만드는 중 문제가 발생했습니다. 또는 비 분리형 (시스템) SD 카드에 구조를 생성하고 있습니다. 기본적으로, 나는 file.mkdirs() 프로세스가 올바른 것이라고 말하고있다. 이름 충돌이나 2 개의 SD 카드로 작업하는 데 문제가 있습니다. –

+0

문제는 게시 한 모든 코드가 내가 질문에 게시 한 코드와 동일하다는 것입니다. 그것은 안드로이드 시스템 안쪽에 아무 문제없이 그것을 함께 작업 할 수있는 폴더를 만듭니다 않습니다. 나는 그것을 WindowsExplorer 내부의 폴더로 볼 수 없으며 이것이 폴더를 만들지 않는 문제입니다. 폴더로 작동시키는 방법 – Daler

0

이 시도 :

String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
    File folder = new File(extStorageDirectory, "DIR_NAME"); 
    folder.mkdir(); 
    File file = new File(folder, "Sample.txt"); 
    try { 
     file.createNewFile(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
0

코드 아무 문제가 없습니다. 내 모든 애플 리케이션에이 동일한 코드를 사용하고 그들은 잘 작동합니다. 코드를 복사/붙여 넣기하면 효과적입니다. 폴더 "Beatss"는 Windows 컴퓨터에서 볼 수 있습니다. 반드시 SD 카드에 문제가 있어야합니다. 오류가 있는지 확인하거나 다른 SD 카드를 사용해보십시오.

Windows에서 sdcard를 마우스 오른쪽 단추로 클릭 한 다음 속성> 도구> 오류 검사를 선택한 다음 '지금 확인'을 클릭하십시오. 오류가 없으면 다른 카드를 사용해보십시오. 그렇지 않다면, 다른 장치에 apk를 시도해보고 거기서 작동하는지 확인하십시오.

+0

나는 2 개의 전화에서 시험해 보았다, 그렇게 일하지 않는다.. 플래시 카드가 아니라. 어쩌면 다른 제조사에서 시험해보아야 할 것입니다. 모든 테스트 장치는 Sony에서 제공 한 것입니다. – Daler

관련 문제