java读取apollo配置 java判断文件夹是否存在该文件( 五 )


Properties通过load和store方法将Key=Value的对应关系从文件中加载并转化为Properties对象和将Properties对象转化为Key=Value对应关系存在到文件中 。注意:在文件中存储的Key=Value关系形式 , 在等号两侧是否有空格很重要 , 如果有空格 , 虽然看上去是没什么问题 , 但是对于Properties对象而言却不是你想要的结果 , 可以自己尝试一下 。如果需要在被Load的文件中添加注释的话 , 则在行首添加 # 即可 。
#this is a test conf#Sat Sep 21 15:03:54 CST 2019Age=20Name=vitaminPrintStream & PrintWriter
最后再来说一下Java提供的打印流 PrintStream 和 PrintWriter , 可以在输出的数据上做一些格式化操作 。提起 PrintStream 你可能会感到很陌生 , 但你是否留意过经常使用的System.out.print() 方法的内部实现 , 它的底层就是使用 PrintStream 来操作的 , PrintStream 继承自文件字节流 FileOutputStream 。对于后者 PrintWriter 更加常用 , 因为它实现了前者的所有方法 , 并且可以实现对字符流的打印 , 这是PrintStream所没有的 。所以 PrintWriter 也更加灵活 。下面通过示例来感受下 PrintWriter吧
File file =new File("destFile.txt");PrintWriter pw =null;try{ pw = new PrintWriter(file); pw.printf("Name=%s", "vitamin"); pw.flush();}catch(IOException ex) {}finally { pw.close(); }值得注意的一点是 PrintWriter 的 close() 方法不会抛出IOException , 因为在底层这个异常已经被捕捉并处理了 。
PrintWriter的内部是有缓冲区的(当构造函数传入的是File类型时 , 内部使用的是BefferedWriter来实现的) , 所以需要手动调用flush()方法 。但是PrintWriter的构造函数支持第二个参数:是否启用自动刷新缓冲 。当设置为true后 , 仅当调用 println , printf , format 方法时才会生效 。
IO流的选择
上面说了这么多的IO流 , 到底什么场景下需要该使用什么流呢?来看一张图
除了上面的图之外还需要在额外问自己几个问题:
是否需要进行序列化和反序列化操作?如果是则选择 ObjectInputStream 或 ObjectOutputStream 。是否需要读取Key=Value形式或者是想要存储成Key=Value形式的配置?如果是可以选择 Properties 操作起来更加方便 。是否需要打印指定格式的数据到输出文件?可以考虑使用 PrintWriter , 其实它就是在流的基础上提供了一些更加简洁的操作 。end:如果你觉得本文对你有帮助的话 , 记得关注点赞转发 , 你的支持就是我更新动力 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: