【问题标题】:which of the following is the best way of creating a file?以下哪项是创建文件的最佳方式?
【发布时间】:2016-12-20 13:06:00
【问题描述】:

它们有什么区别?

如何以文本格式存储数据并在需要时检索它?

在我学会 sql 之前,如何以简单的方式存储数据?

 try{

     FileWriter fileWriter=new FileWriter("C:\\Users\\acer\\Downloads\\java     Q//somthing.txt");
     fileWriter.write("here is the first text");

     fileWriter.append(" \n the secound one ");
     fileWriter.close();

 } // try

 catch(IOException e){

     System.out.println(" an error occer ");


} // catch

或者那样

WriteFile writeFile=new WriteFile(); // a class WriteFile the implements   Serilizable


 try{

 FileOutputStream fileOutputStream=new FileOutputStream("C:\\Users\\acer\\Downloads\\java Q//something.ser");

 ObjectOutputStream objectoutputs=new ObjectOutputStream(fileOutputStream);

 objectoutputs.writeObject(writeFile);

 objectoutputs.flush();

 objectoutputs.close();
 } // try

 catch(IOException e){

     System.out.println("an error occer");

} // catch

【问题讨论】:

  • 这取决于您的软件的要求。序列化可能很危险,请查看this comment 我写的为什么在将状态存储到驱动器时​​可能希望避免序列化。我推荐一个简单的FileWriter 或将状态存储到Properties 文件。如果用户在存储到驱动器时​​不应该读取数据,您可以创建自己的加密系统来转换正在存储的状态。
  • 2016年,“纯java对象序列化”绝对不是你的首选。它有很多限制;甚至安全风险。如果有的话,请考虑将其“序列化”为 JSON 字符串并将其保存为人类可读的文本。这使您的测试变得更加容易;并给出了你幼稚的想法;我猜你会花很多时间……测试和调试。
  • @GhostCat JSON 易于阅读。如果存储到驱动器,用户可以(轻松)访问和编辑 JSON 以利用该软件。还有其他形式的本地持久存储易于测试但难以利用。这在很大程度上取决于他的软件的要求。
  • @VinceEmigh 不确定我是否同意。任何正在读取数据的应用程序都应采取一定的预防措施。如果数据被写入文件,格式真的无关紧要。
  • @GhostCat 格式确实很重要。假设您以 JSON 形式存储用户拥有的现金金额。没有办法仔细检查读取的值是否与写入的值相同。他们可以轻松地给自己无限的现金。这个想法是为了让用户更难(这实际上是所有安全性:增加复杂性)。理论上,任何客户端都可以被利用。目标是使其更难被利用(或将其保留在服务器上)。如果这是一款离线游戏,如果存储为 JSON,用户可以轻松利用该软件(我一直使用 Android 应用程序)。

标签: java database data-structures


【解决方案1】:

如果您可以将其写为文本,请使用它。这是最简单的工作。您可以在文本编辑器中查看和编辑它。

当您有不容易转换成文本的对象时,您应该使用序列化(或者出于性能原因,尽管 Java 序列化非常慢,所以它也不是一个好的选择)

顺便说一句:我会避免

  • 在路径中同时使用\\/。只需使用其中一种即可。
  • 在目录名称中使用多个空格。恕我直言,这令人困惑,除非您能说出为什么要使用那些卑鄙的空格。
  • 使用.write().append(),但不能同时使用。
  • 使用 try-with-resource 关闭可关闭的 FileWriter。

例如

File file = new File("C:\\Users\\acer\\Downloads\\java Q\\something.txt");
try (PrintWriter pw = new PrintWriter(file)) {
   ps.println("here is the first text");
   ps.println("the second one ");
}

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2019-03-05
    • 2016-02-23
    相关资源
    最近更新 更多