2013-01-24 279 views
1

困惑:那些誰投下來的一個問題,你可以添加一些意見,爲什麼????我想說不好的話,只是不想被禁止。文件夾中創建一個文件

我有一個應用程序,我想有一個文件夾在SD卡,使用戶可以添加一些東西,然後我可以用它在應用程序中。我用下面的代碼來創建一個文件夾:

@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:那麼,breaked起來的logcat direct線,看是否有真正的路徑:

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

所以有..

UPD3:我不能展示我所有的代碼是264到目前爲止。所有這個文件夾創建發生在mainActivity的onCreate。在manifest資源配置文件看起來是這樣的:

<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> 

更新代碼上:

logcat的說:

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與十幾個目錄遍佈SD卡 - 使其習慣存儲在'/ SD卡/ Android /我的.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

下面是一個應用程序,我有一個代碼段生產....

第一次安裝應用程序時,確定

settingsDatabasePath。它可以是外部存儲器或內部存儲器,具體取決於設備是否具有外部存儲器。此外,這個片段之前,已經確定GC.APP_DIRECTORY(字符串在GC類常量)尚未建立。此外,在此片段之後,將進行測試以確保該目錄已被創建,它是可寫的,並且它是一個目錄。數據庫和文件是在app目錄中創建的,以防止在根級目錄中「潑濺」文件。

注:settingsDatabasePath是故意被過度寫入。如果您複製代碼,則可能不想執行重寫。

+0

你其實放了一半東西,這個代碼有什麼用處?開始在哪裏?我已經厭倦了很多創建那個該死的文件夾的方法,但它創建了一個文件而不是文件夾。 – Daler

+0

關鍵代碼是重複的gabrielaugustodm's。使用mkdirs()創建整個目錄。 mkdir()僅創建現有目錄樹上的最後一個目錄。如果失敗,兩者都會返回錯誤。也不會創建一個文件。您的問題似乎是嘗試在目錄應該在的級別創建一個與現有文件同名的目錄。或者,您正在不可移動(系統)sd卡上創建結構。基本上,我說的是file.mkdirs()過程是正確的。您遇到名稱衝突問題或者使用兩張SD卡而不是一張卡。 –

+0

問題是,您發佈的所有代碼也與我在問題中提出的相同。它確實創建了一個文件夾,在android系統裏面,你可以毫無問題地使用它。我無法將其視爲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

沒有什麼不對您的代碼。我在我的所有應用程序中使用了相同的代碼,並且它們工作得很好。 我複製/粘貼你的代碼,它效果很好。我的Windows機器上可以看到文件夾「Beatss」。你必須對你的SD卡有問題。您需要檢查錯誤或嘗試其他SD卡。

在Windows中右鍵點擊SD卡,然後選擇屬性>工具>錯誤檢查,然後點擊'現在檢查'。如果沒有錯誤,請嘗試另一張卡片。如果沒有,那麼在另一臺設備上嘗試你的apk,看看它是否在那裏工作。

+0

我試過兩部手機,不工作,所以..不是閃存卡。我必須試試其他製造商,也許,我所有的測試設備都來自索尼。 – Daler

相關問題