字节流会出现一个问题, 传输过程涉及中文时, 会出现乱码, 主要是因为不同编辑软件对文件的编码方式不同,
Java.io.OutputStream字节输出流
此抽象类表示: 所有输出字节流的类的超类(父类)
子类共性的成员方法:
- public void close() : 关闭输出流并释放与此相关的系统资源
- public void flush() : 刷新输出流并强制输出缓冲的输出字节
- public void write(byte[ ] b) : 将b.length长度的字节从指定数组b输出(写入)到此输出流, 每次写入会覆盖掉文件中原本的数据
1、如果传入的是一个数字, 则文件中看到的是此数字对应的ascII字符
2、如果字节数组中的数字是负的, 则和后面一个数字一起组成一个汉字
3、输入中文:中文字符串的getByte() - public void write(byte[ ] b,int off, int len) : 将指定数组b从 off 位置开始的len个字节输出(写入)到此输出流
- public void
Java.io.FileOutputStream extends OutputStream
文件字节输出流 : 将内存中的字节输出到硬盘的文件中
构造方法
- FileOutputStream(String name) : 创建一个向路径为name的文件中写入数据的字节输出文件流
- FileOutputSteam(File file) : 创建一个向指定对象file表示的文件中写入数据的字节输出文件流
写入文件的过程
java程序 --> jvm虚拟机 --> os --> os调用写数据的方法 --> 数据写入硬盘文件中
注意事项
- 每次写入会覆盖掉文件中原本的数据,如果想要续写而不覆盖,创建对象时new FileOutputStream(String str,boolean append),将append写为true
- 文件中要换行:fileOutputStream.write("\r\n".getByte());
java.io.InputStream
子类共性的成员方法:
- public int read() : 一次读一个字节并返回, 直到读到文件的末尾则返回-1
- public int read(byte[ ] b) : 从输入流中读取一定数量的字节,存储在缓冲区数组b中
返回的是每次读取的字节个数, 如果到了文件末尾则返回-1
b多大则每次读入多少个字节, 覆盖b中原有的数据, 直到文件末尾, -1不写入b中
所以b一般设置为1024byte, 输出时先转换为字符串(只转换字符串的有效部分)
Java.io.FileInputStream extends InputStream
文件字节输入流: 将将硬盘文件中的数据读出(输入)到内存中
构造方法:
- FileInputStream(File file) : 传入硬盘文件对应的文件对象
- FileInputStream(String str) : 传入硬盘中文件的路径
/*
读取整个文件的内容到内存
*/
public class DemoInputStream {
public static void main(String[] args) throws IOException {
int len ;
FileInputStream fis = new FileInputStream("src\\com\\IO\\b.txt"); //建立字节流对象,指向文件
while ((len = fis.read()) != -1){ //1\每次读取一个字节,读取直到文件末尾
System.out.print((char) len);
}
//byte[] bt = new byte[1024]; //一次读取多个字节
//while ((len = fis.read(bt)) != -1){
//System.out.println(new String(bt, 0, len));
//}
fis.close();
}
}