【问题标题】:How to write file to Android device from outside of activity?如何从活动之外将文件写入 Android 设备?
【发布时间】:2012-11-19 16:10:44
【问题描述】:

我的主要活动是创建一个名为 fileSaver 的新对象。我正在尝试将对象“数据”序列化到文件中。 FileSave 有一个方法 serialize() 可以创建文件。

private String FILE_NAME = "file.dat";
FileSaver fileSaver = new FileSaver();
Data data = new Data();
data.setEmail("aaa@bbb.com");
fileSaver.serialize((Object) data,FILE_NAME);

问题是我无法在活动之外创建文件。当我尝试相同的内部活动时,它会创建该文件。我正在尝试路径,但没有成功。我知道从活动创建文件时,它保存在 /data/data/my_package_name/files 但如何从外部活动类访问该文件?

类 FileSaver:

public class FileSaver {

public void serialize(Object objToSerialize,String fileName) {

    try {
        ObjectOutputStream out = new ObjectOutputStream(
                new FileOutputStream(fileName));
        out.writeObject(objToSerialize);
        out.close();
        System.out.println("Object : " + objToSerialize.getClass()
                + " serialized successfully");
    } catch (Exception ex) {
        System.out.println("Error Saving Object to File :"
                + ex.getMessage());
        ex.printStackTrace();
    }
}
}

谢谢。

【问题讨论】:

  • 发布您的 logcat..您是否收到任何错误消息?您打算如何在活动之外进行操作??
  • Logcat:12-01 18:45:39.001:I/System.out(1621):将对象保存到文件时出错:/file.dat:打开失败:EROFS(只读文件系统) 12-01 18:45:39.029: W/System.err(1621): java.io.FileNotFoundException: /file.dat: 打开失败:EROFS(只读文件系统)
  • 用于序列化的对象是在活动内部创建的,所以我认为它应该以某种方式工作。

标签: android serialization android-activity android-file data-access


【解决方案1】:

您必须将上下文传递给外部 java 类并使用上下文,使用此 openFileOutput() 方法在 android 设备内存中创建和写入文件

【讨论】:

  • 您能稍微解释一下,或者放一段代码吗?我不确定我是否理解。谢谢。
  • 调用序列化方法时如何传递上下文? fileSaver.serialize((Object) data,FILE_NAME, ??context??);我知道 openFileOutput() 方法,但如何在另一个类中使用该方法。对我来说,问题是如何将它与活动的上下文联系起来?我在任何地方都找不到例子。谢谢你:)
【解决方案2】:

您可以将文件保存在 SDCARD 中。

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(Environment.getExternalStorageDirectory()+File.separator+filename));

//这里的文件名是您在字符串中的输入文件名,Environment.getExternalStorageDirectory() 为您提供 SDCard 目录。

还要确保在 Android 清单文件中添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【讨论】:

  • 谢谢。这是个好主意(我会尝试),但我的想法是将该文件写入 /data/data/my_apk_package_name/files ,其中应用程序具有存储文件的所有权限。我正在尝试做 kumaand 上面建议的事情,但我不确定如何传输上下文然后使用该 openFileOutput() 方法。我几乎一整天都在谷歌上搜索,但找不到一些代码示例。
猜你喜欢
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
相关资源
最近更新 更多