【问题标题】:Android: How to create a XML - based file for the data container, read from file/add contentAndroid:如何为数据容器创建基于 XML 的文件,从文件中读取/添加内容
【发布时间】:2020-06-21 10:59:14
【问题描述】:

在一个项目的上下文中,我想创建一个基于 XML 文件的数据容器。

每个条目都应该是一个 XML 文件。

对于这个任务,我创建了一个新目录,如下所示: DataBase

为了用 XML 文件填充数据库,应执行以下操作:

  1. 在数据库文件夹中创建一个 XML 文件。
  2. 向上述 XML 文件添加内容。
  3. 最终更改 XML 文件中的内容。

我尝试了什么:

对于 1:

int exampleNumber= 1444;
FileOutputStream example = openFileOutput("app/src/main/java/DataBase/FileName.xml", MODE_PRIVATE); 

example.write(exampleNumber);
example.flush();
example.close();

问题:什么都不做。

对于 2:

private String PATH = "app/src/main/java/DataBase/FileName.xml";

public void addToXML(String Text) throws IOException {
String textToAppend = Text;
BufferedWriter writer = new BufferedWriter(new FileWriter(this.PATH, true));
writer.write(textToAppend);
writer.close();
}

问题: 2. 工作 1. 必须工作。 1->2

对于 3:

与上述相同的问题

【问题讨论】:

  • app/src/main/java/ 是开发目录,您在安卓设备上无法访问它们
  • 首先感谢您的贡献!如何实现以下场景:在android应用程序中,用户将一个选项放入复选框中,此数据保存在目录-> XML文件中,以后可以访问以进行解析等......如何实现这种事情?
  • 你不应该直接使用 XML 来保存和加载值,这将很难做你想做的事。您需要使用的是“SharedPreference”(developer.android.com/reference/android/content/…),它允许您存储(当然也可以检索它们)键值对数据。
  • 好吧,@EnzoCaceres,它们必须是 XML 文件,并且它们稍后将被导出到外部设备。
  • SharedPreference 使用基于 XML 的文件类型,保存一些数据后,您可以轻松地将其作为原始字符串文件读取并发送到您想要的任何地方。

标签: java android xml file android-studio


【解决方案1】:

这是一个简单的代码来演示我的话。 (我在 Note 9 上测试过)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    // Keep your preference in memory
    SharedPreferences pref = getApplicationContext().getSharedPreferences("my_xml_file", 0); // 0 - for private mode
    SharedPreferences.Editor editor = pref.edit();
    
    // Change values
    editor.putBoolean("a_boolean_value", true);
    editor.putInt("an_int_value", 42);
    
    // Apply modification to the file
    editor.commit();
    editor.apply();
    
    try { // Read the file as a string and log it
        Log.i(getClass().getSimpleName(), readAsString("my_xml_file.xml"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public String readAsString(String file) throws IOException {
    FileInputStream fileInputStream = new FileInputStream(new File(new File(getDataDir(), "shared_prefs"), file));
    // Preference files are stored in: /data/data/<your package>/shared_prefs/<name>.xml
    
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream, StandardCharsets.UTF_8))) {
        StringBuilder builder = new StringBuilder();
        
        String line;
        while ((line = reader.readLine()) != null) {
            builder.append(line);
            builder.append('\n');
        }
        
        return builder.toString();
    }
}

希望对你有所帮助。

【讨论】:

  • 您的方法效果很好,但是是否有可能将您选择的标签添加到 XML 文档中,例如 等 bcs,因为现在看来您只能引入putInt、putFloat等? @恩佐·卡塞雷斯
  • 谢谢,但遗憾的是没有...共享首选项旨在将数据存储为键值。您总是可以使用 XML 库以您想要的树形形式保存数据,但是您将失去这件事的简单性。抱歉,这不是您要找的答案。
  • 没关系,我只是在寻找一种尽可能轻松地写入 XML 文件的方法
  • 类似的东西怎么样? github.com/jmurty/java-xmlbuilder(但阅读会更难)
  • 或者你可以试试序列化库,比如jackson:stackabuse.com/…
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
相关资源
最近更新 更多