【问题标题】:How to write file to sd-card? (Android) No errors, but nothing written如何将文件写入sd卡? (Android) 没有错误,但没有写入
【发布时间】:2014-09-25 12:50:14
【问题描述】:

我是开发 Android 应用程序的新手。并且已经对我的第一个项目提出了挑战。我的应用程序应该能够通过单击“保存”按钮将EditText 字段列表保存到文本文件中。 但是我没有成功将文件写入我的 SD 卡。

我的代码: (按钮调用的MainActivity.java中的函数)

public void saveData(View view){
        try{
        File sdcard = Environment.getExternalStorageDirectory();
        // to this path add a new directory path
        File dir = new File(sdcard.getAbsolutePath() + "/myapp/");
        // create this directory if not already created
        dir.mkdir();

        // create the file in which we will write the contents

        File file = new File(dir, "datei.txt");


        FileOutputStream os = new FileOutputStream(file);
        String data = "some string";
        os.write(data.getBytes());
        os.flush();
        os.close();
        }
        catch (IOException e){
            Log.e("com.sarbot.FitLogAlpha", "Cant find Data.");
        }
    }

通过 Google,我找到了另一种方式:

public void saveData3(View view){
    FileWriter fWriter;
    File sdCardFile = new File(Environment.getExternalStorageDirectory() + "/datafile.txt");
    Log.d("TAG", sdCardFile.getPath()); //<-- check the log to make sure the path is correct.
    try{
         fWriter = new FileWriter(sdCardFile, true);
         fWriter.write("CONTENT CONTENT UND SO");
         fWriter.flush();
         fWriter.close();
     }catch(Exception e){
              e.printStackTrace();
     }
}

在我的manifest.xml 我设置了权限:

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

开发者指南中的函数返回 True -> SD 卡是可写的。

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

res/layout/activity_main.xml 中有一些TextViewsEditText 以及带有android:onClick="saveData" 参数的保存按钮。该函数被调用。 SD 卡是可写的。并且没有 IO 错误。但是在按下按钮后(没有错误),我的 SD 卡上仍然没有新文件。我已经尝试手动创建文件并且只是追加但没有任何改变。我也尝试了BufferedWriter 的其他功能.. 但没有成功。

我正在使用 USB 调试模式运行 Sony Xperia E。在我的 PC 上卸载并安装 SD 卡,但找不到文件。也许它只对手机可见?它不存在吗?我不知道该怎么做,因为我没有收到任何错误。我需要此文件的内容在我的计算机上进行计算。

:编辑: 问题不在代码中..只是在我查找的地方。 externalStorage -> sdCard 似乎是内部的,可移动的 sdcard 是 -> ext_card。

【问题讨论】:

  • os.flush() - 方法刷新此输出流并强制写出任何缓冲的输出字节。 flush 的一般约定是,调用它表示,如果先前写入的任何字节已被输出流的实现缓冲,则应立即将这些字节写入其预期目的地。
  • @Glod Glodson 你在哪里找文件?你在哪里搜索?可以告诉我地址​​吗?
  • 我查看了我电脑上的可移动存储卡。我已经找到了文件。 getExternalDirectory() 似乎是内部 sdcard。令人困惑。所以 sdcard=externalstorage 但在手机内部,ext_card = 可移动“rly external”sd-card。如果我弄清楚如何访问 ext_card,这就解决了。完美是一种通过电子邮件、保管箱或其他方式导出文件的方法,但我猜这应该是另一个步骤。

标签: java android storage external


【解决方案1】:

在这一行之后,

 File file = new File(dir, "datei.txt");

添加此代码

 if ( !file.exists() )
 {
      file.createNewFile();         // This line will create new blank line.
 }

【讨论】:

  • 我也添加了这个,但仍然没有任何变化。该文件是否可能存在,但我只是在我的电脑上以 USB 存储模式看不到它们?
  • 或许可以,做一件事,将手机从usb口拔出,然后检查文件。还做一件事,删除旧应用程序,然后重新运行项目。有时不会发生变化。
  • 我会在我的手机上安装一个文件浏览器来查看它。另一个我已经完成了。
  • 就是这样..我在手机上使用了文件浏览器并找到了文件(以及一些来自旧尝试的文件):) 好的,所以代码可以工作。我只是不了解Android文件管理。 sdcard/ 文件夹是我的内部存储,或者不是我可以删除的 sdcard。这是 ext_card。令人困惑。但是如果 getExternalDirectory() 返回内部 sd 卡,如何获取我的外部 sdcard 的路径。
【解决方案2】:

您的代码中缺少os.flush()。在os.close()之前添加这个sn-p

【讨论】:

  • 我在 os.write() 之后添加了 os.flush() 但仍然没有任何改变
猜你喜欢
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多