IO的概念
Java中I/O操作主要是指使用java.io
包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
IO的分类
根据数据的流向分为:输入流和输出流。
-
输入流 :把数据从
其他设备
上读取到内存
中的流。 -
输出流 :把数据从
内存
中写出到其他设备
上的流。
格局数据的类型分为:字节流和字符流。
-
字节流 :以字节为单位,读写数据的流。
-
字符流 :以字符为单位,读写数据的流。
字节流读写
字节流主要用于读写二进制文件,主要运用FileInputStream类和FileOutputStream类,运用这两个类的同时抛出IOException的异常
实现步骤:
1、写入:
1> 使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream(文件路径);
2>使用FileOutputStream类中的write(byte butes)写入数据;
3>关闭流(fos.close())
4>如果还想继续写入数据,使用文件名称创建流对象
FileOutputStream fos = new FileOutputStream("fos.txt",true);
然后继续重复以上步骤。
2.读出:
1> 使用文件名称创建流对象
FileInputStream fis = new FileInputStream(文件路径);
2>定义变量,保存数据
int b ;
/*
定义字节数组,规定数据以n为长度个字节输出
byte[] b = new byte[n];
*/
3> 循环读取
while ((b = fis.read())!=-1) {
System.out.println((char)b);
}
/*
while ((b = fis.read(b))!=-1) {
System.out.println((char)b);
}
*/
4> 关闭资源
fis.close();
字符流读写
字符流主要用于读写字符串
读:
1、创建FileReader流
2、
写:
写:
1.创建FileWrier流
2. 写出数据
fw.write(int b);
3.关闭流
4.如果还想继续写入数据,使用文件名称创建流对象
FileWriter fos = new FileWriter("fos.txt",true);
然后继续重复以上步骤。
另外:写出字符串:write(String str)
和 write(String str, int off, int len)
,每次可以写出字符串中的数据,更为方便,代码使用演示:
public class FWWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileWriter fw = new FileWriter("fw.txt");
// 字符串
String msg = "武汉程序员";
// 写出字符数组
fw.write(msg); //武汉程序员
// 写出从索引2开始,2个字节。索引2是'程',两个字节,也就是'程序'。
fw.write(msg,2,2); // 程序
// 关闭资源
fos.close();
}
}
字符流与字节流共同的方法:
-
flush
:刷新缓冲区,流对象可以继续使用。 -
close
:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
写的时候注意;当前流刷新后,如果再写入内容,写完后必须再次刷新,否则后面写入的内容不能显示出来,
即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。
Properties类
java.util.Properties
继承于Hashtable
,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties
方法就是返回一个Properties
对象。
构造方法
-
public Properties()
:创建一个空的属性列表。
基本的存储方法
-
public Object setProperty(String key, String value)
: 保存一对属性。 -
public String getProperty(String key)
:使用此属性列表中指定的键搜索属性值。 -
public Set<String> stringPropertyNames()
:所有键的名称的集合。
与流相关的方法
-
public void load(InputStream inStream)
: 从字节输入流中读取键值对。
参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样就能够加载文本中的数据了。文本数据格式:
public class ProDemo2 {
public static void main(String[] args) throws FileNotFoundException {
// 创建属性集对象
Properties pro = new Properties();
// 加载文本中信息到属性集
pro.load(new FileInputStream("read.txt"));
// 遍历集合并打印
Set<String> strings = pro.stringPropertyNames();
for (String key : strings ) {
System.out.println(key+" -- "+pro.getProperty(key));
}
}
}
输出结果:
filename -- a.txt
length -- 209385038
location -- D:\a.txt