使用字节流会出现的问题:
遇到中文字符是,可能不会显示完整的字符。
解决这个问题就用到的是字符流,字符流专门处理文本文件。
GBK和UTF-8:
GBK:主要用于中文编码,长度占2个字节
UTF-8:包含全世界用到的字符,会占用更多的数据库存储空间,长度占3个字节
一、字节输出流-OutputStream
抽象类,字节输出流所有的超类
基本共性功能方法:
子类:File Out out stream(文件字节输出流)
作用:把内存中的数据写入到硬盘文件中
构造方法:
FileOutputstream(String name)创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputstream(File file)创建一个指定File对象表示的文件中写入如数据的文件输出流。
写入数据的原理
(内存->硬盘):java程序-JVM(虚拟机)-OS(操作系统)-OS调用写数据的方法-把数据写到文件中
练习:一次写一个字节,流的使用步骤
步骤一:
创建一个FileOutputStream对象
FileOutputStream fos = new File OutputStream(name:“写入的目的地”);
步骤二:
调用共性功能方法write,把数据写到文件中
fos.write(b:49);//49表示1,一次就放进一个1
步骤三:
写入后要释放资源(流使用会占用一定的内存,使用完毕清空,提供程序效率)使用close
fos.close();
练习:一次写入多个字节
步骤一:
创建一个对象
FileOutputStream fos = new File OutputStream(name:“相对/绝对路径\\文件名”);
步骤二:
写一个数组,再把数组传进去
Byte[] bytes = {65,66,67,68};//查询ASCII码,得ABCD
fos.write(bytes);
步骤三:
释放
fos.close();
续写和换行:
续写
使用两个参数的构造方法:
FileOutputStream(String name,boolean append)//name是写入的目的地;
append追加写开关,有true和false。
true不会覆盖源文件,继续在文件末尾追加写数据;
false创建新文件,覆盖;
换行
Windows:\r\n
Linux:\n
Mac:\r
例子:
二、字节输入流-InputStream
子类:FileInputstream(文件字节输入流)
作用:把硬盘文件的数据,读取到内存中使用
构造方法:
FileInputstream(String name);Srting name 文件路径
FileInputstream(File file);文件
构造方法的作用:
创建FileInputstream对象,把对象指定方法读取文件
读取数据的原理:
(硬盘->内存):java程序-JVM-OS-OS读取数据的方法-读取文件
练习:一次读取一个
步骤一:
创建一个对象
FileInputStream fis = new FileInputStream(name:“要读取的路径”);
步骤二:
把FileInputStream对象指定构造方法中要读取的文件
Int len = fis.read();//读取要有返回值
System.out.println(len);//输出
步骤三:
关闭释放资源
fis.close();
练习:一次读取多个
步骤一:
创建一个对象
步骤二:
把FileInputStream对象指定构造方法中要读取的文件
Byte[] bytes = new byte[2];//定义一个数组,长度为两位
Int len = fis.read(bytes);
System.out.prinln(Arrays.toString(bytes));
步骤三:
关闭释放资源