7

SDカードにフォルダとファイルを作成する際に問題が発生しました。

コードは次のとおりです。

    File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/folder");
    boolean success;
    if (!folder.exists()) {
        success = folder.mkdirs();
    }
    File obdt = new File(folder, "file.txt");
    try {
        success = obdt.createNewFile();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

このコードを使用して、SDカードfolderDownloadフォルダーとこのファイルにフォルダーを作成することを期待していますfile。ユーザーがファイルにアクセスできるようにしたい。なので、共有フォルダに入れたいです。変数はであり
、コードを再度実行すると、フォルダーは既に存在し、ifブロックに含まれていません。 しかし、ファイルエクスプローラーのSDカードに作成されたフォルダーとファイルが表示されません。 情報:返品successtrue


getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()storage/sdcard/Download

私はGalaxyNexusを使用しています。

4

7 に答える 7

3

くそ!:)

今、私は自分の問題を解決しました...私はファイルシステムでファイルを作成する操作を誤解していました。
私がファイルエクスプローラーについて話したとき、私はオペレーティングシステムのファイルエクスプローラーを意味し、DDMSのファイルエクスプローラーではありませんでした:)。
ファイルを作成すると、オペレーティングシステムのファイルエクスプローラーに表示されると思いましたが、デバイスがPCに接続されている場合、ファイルはDDMSファイルエクスプローラーでのみ表示されます。
申し訳ありませんが、Androidは初めてです;)

アプリがPCに接続せずにスタンドアロンで実行され、その後PCに接続すると、もちろん作成されたファイルとフォルダーが表示されます:)

手伝ってくれてありがとう

于 2012-11-15T10:46:16.757 に答える
0

まだ行っていない場合は、マニフェストに以下の行を追加して、アプリにSDカードへの書き込みを許可する正しい権限を与える必要があります。

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

すでにそれを行っている場合は、次のことを確認してください。

File obdt = new File(/sdcard/folder/file.txt)
try {
    success = obdt.createNewFile();
} catch (IOException e1) {
    e1.printStackTrace();
}

動作します。

于 2012-11-15T09:49:09.793 に答える
0

logcatからのエラーはありますか?
それ以外の場合:Log.I( "PATHNAME"、folder.absolutePath());のようなものを試してください。次に、logcatを調べて、フォルダを作成している場所を確認します。

于 2012-11-15T09:51:13.930 に答える
0

これを試してみてください。

        File dir = new File(Environment.getExternalStorageDirectory()
                + "/XXX/Wallpapers/");
        File[] files = dir.listFiles();

        if (files == null)

        {
            int numberOfImages = 0;
            BitmapDrawable drawable = (BitmapDrawable) imageView
                    .getDrawable();
            Bitmap bitmap = drawable.getBitmap();
            File sdCardDirectory = Environment
                    .getExternalStorageDirectory();
            new File(sdCardDirectory + "/XXX/Wallpapers/").mkdirs();
            File image = new File(sdCardDirectory
                    + "/XXX/Wallpapers/Sample" + numberOfImages + ".JPG");

            boolean success = false;
            FileOutputStream outStream;
            try {
                outStream = new FileOutputStream(image);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                outStream.flush();
                outStream.close();
                success = true;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();

            }
            if (success) {
                Toast.makeText(
                        getApplicationContext(),
                        "Image saved successfully in Sdcard/XXX/Wallpapers",
                        Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(),
                        "Error during image saving", Toast.LENGTH_LONG)
                        .show();
            }

マニフェストに許可を追加することを忘れないでください

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2012-11-15T09:55:47.213 に答える
0

エクスプローラーでフォルダー/ファイルが表示されませんか?MediaScannerがアクティブであるが、ファイルを追加していないことが原因である可能性があります。プログラムでこれを行うか、電話設定のどこかのメディアスキャナーを切り替えることができます。

MediaScanner

MediaScannerをトリガーします

于 2012-11-15T10:06:16.360 に答える
0

どうやらMTPには既知のバグがあります。

問題195362USB マスストレージの代わりにMTPを使用しているすべての電話は、その電話がUSBケーブルを使用してコンピューターに接続されている場合、ファイルのリストを正しく表示しません。デバイスで実行されているAndroidアプリも、これらのファイルを表示できません。

実は2012年と同じくらい古いです

于 2016-02-09T01:10:05.807 に答える
0

私は同じ問題に遭遇しました:ファイルがフラッシュされて閉じられているにもかかわらず、作成されたファイルとフォルダがsdcardに書き込まれた直後に表示されません!!

USB経由のコンピューターや電話のファイルエクスプローラーには表示されません。

私は3つのことを観察しました:

  1. ファイルの絶対パスがそれで始まる場合、/storage/emulated/0/それがSDカードにあることを意味するわけではありません-代わりにメインストレージにある可能性があります。
  2. 約5分待つと、ファイルはUSB経由で表示され始めます(つまり、Windowsエクスプローラーと組み込みのファイルエクスプローラー)
  3. ターミナルから使用する場合adb shell ls /sdcard、ファイルは表示されます!adb pull ...すぐにファイルを取得するために使用できます。おそらくDDMSも使用できます。

私が使用したコードは次のとおりです。

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileOutputStream os = new FileOutputStream(newFile);
            os.write(json.getBytes());
            os.flush();
            os.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(myArrayList);

        try {
            File externalDir = getExternalStorageDirectory();
            File newFile = new File(externalDir, "myfile.txt");
            FileWriter fw = new FileWriter(newFile);
            fw.write(json);
            fw.flush();
            fw.close();
            Timber.i("saved file to %s",newFile.getAbsoluteFile().toString());
        }catch (Exception ex)
        {
            Toast.makeText(getApplicationContext(), "Save to private external storage failed. Error message is " + ex.getMessage(), Toast.LENGTH_LONG).show();
        }

なんでこんな感じ?初めて体験するときに苦しむ「Androidイズム」のひとつのようです。

于 2018-08-09T22:07:07.290 に答える