一、FileInputStream/FileOutputStream
- A:FileInputStream 读一些数据就少一些数据
- 概念:用于文件字节数据内容读出的字节流,建立了字节流通道
- 用法:
-
1.构建文件对象 将文件对象传入到文件读入字节流
File file = new File(“src/a.txt”);
FileInputStream fis = new FileInputStream(file);
-
- 构建文件字节读入流 传入文件路径
- 不存在,就会抛出编译时候异常
FileInputStream fis = new FileInputStream(“src/a.txt”);
-
- 方法:
-
1.fis.read();//d读取文件中的一个字节,读取空值时候为-1
-
2.fis.read(byte[]); //读取文件内容到字节数组中
-
3.读取完所有的文件字节数据内容
int da = 0;
while ((da = fis.read())!=-1) {
//System.out.print(da);
}
-
- 注意:
- 1.多个线程读取文件字节 相互之间不影响
- 2.读取文件字节流数据时候,不可以删除文件,可以修改数据内容
- 修改数据内容:读取字节数据时候,每次读取是按照字节所在位置顺序的
- eg:读取 “abcd” 读取ab Thread.sleep(5000); 中间修改为 " abcd" ,接着读取初来的依旧是 ab
- 3.关闭 文件字节流资源
(二)OutputStream
-
A:OutputStream
-
概念:文件字节内容写入流,建立了文件和写入目标的字节流通道
-
用法:
-
1.创建文件对象,将文件对象传给写入流,得到文件字节写入流对象
File file = new File("a.txt"); FileOutputStream fos = new FileOutputStream(file);
-
2.直接创建文件写出流通道,传入文件路径
- 没有文件,就会创建文件
FileOutputStream fos2 = new FileOutputStream("abc.txt");
-
3.每次写入到文件中,文件中的数据会清空,需要在文件字节流建立通道时,设置写入字节数据追加
FileOutputStream fos = new FileOutputStream(file, true);
-
-
方法:
- 1.fos.write(byte); //一个字节写入到文件中
- 2.fos.write(but, 0, but.length/2); //一个自定义长度字节数组写入到文件中
-
-
B:注意:
-
- 多个线程同时写字节流到同一个文件加上同步锁 防治写入字节出错
-
2.write();//写出字节或者字节数组,需要写出字符串时候,将写入的字符串变为字节数组
-
fos.write("hello world!".getBytes()); fos.write((Thread.currentThread().getName()+"-"+i+"\r\n").getBytes());
-
-
3.flush();刷新缓冲区
-
5.close();关闭资源
-
(三)FileInputStream和FileOutputStream一起使用时候
- A:资源先用后关(同时写入流要刷新缓冲区)
File file = new File("a.txt");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file,true);
fos.write(fis.read());
fos.flush();
fos.close();
fis.close();
二、Properties
-
A:概念: java.util.Properties是Hashtable的子类,Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。
- 1.配置文件
- 2.key = value(或者 key : value) 数据保存在 .properties
-
B:创建Properties对象
- Properties p = new Properties();
-
C:方法:
-
1.properties对象 加载properties文件内容
p.load(new FileReader("src/com/briup/ch19/a.properties"));
-
2.查看properties对象文件中key=value数据,并打印到指定位置
p.list(System.out);//打印到控制台上
-
3.通过key获取value
p.getProperty("age");
-
4.遍历properties对象的key=value
Set<String> stringPropertyNames = p.stringPropertyNames();
Iterator iterator = stringPropertyNames.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(string+"="+p.getProperty(string));
}
```- 5.向properties对象中添加key=value,不会影响properties文件内容
p.setProperty("gender", "男");
-
6.当前系统的配置信息
* 7.当前系统的配置文件 的值
//Map集合 key=value
//uesr.dir == 当前项目```java Properties properties = System.getProperties(); Set<Object> keySet = properties.keySet(); for (Object object : keySet) { System.out.println(object+"=="+properties.get(object)); } ```
-