博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
零基础Java学习笔记(六)
阅读量:3951 次
发布时间:2019-05-24

本文共 6601 字,大约阅读时间需要 22 分钟。

关于一些基本IO流的简单用法以及使用IO流的标准步骤

四大抽象类

按照数据流向分:输入流、输出流。

按照数据类型分:字节流、字符流

能使用字符流的地方全部能使用字节流,反过来不成立

字节流

输入流 FileInputStream

  • 构造方法
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

功能方法

int read() 从此输入流中读取一个数据字节。 int read(byte[] b)从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 void close() 关闭此文件输入流并释放与此流有关的所有系统资源。

输出流 FileOutputStream

构造方法

父路径存在的情况下,如果文件不存在,会自动创建文件。当append为true的时候,表示向源文件追加内容。

FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。 FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。

功能方法

void write(int b) 将指定字节写入此文件输出流。void write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 void write(byte[] b, int off, int len) 将指定 byte 数组中从off 开始的len个字节写入此文件输出流。void close() 关闭此文件输出流并释放与此流有关的所有系统资源。

字符流

输入流 FileReader

构造方法

FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。

功能方法

int read() 读取单个字符。int read(char[] cbuf) 将字符读入数组。int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。//使用方法同FileInputStream(while循环,判断文档末尾是否为-1

输出流 FileWriter

构造方法

FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 FileWriter(File file, boolean append)  根据给定的 File 对象构造一个 FileWriter 对象。 FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象。 FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 FileWriter(String fileName, boolean append) append如果为true,不覆盖原文件,直接向原文件中追加内容。

功能方法

void close() 关闭此流,但要先刷新它(关闭流的时候也会自动刷新)。  void flush() 刷新该流的缓冲。  String getEncoding() 返回此流使用的字符编码的名称。  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。  void write(int c) 写入单个字符。  void write(String str, int off, int len) 写入字符串的某一部分

转换流

InputStreamReader

构造方法

InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 InputStreamReader(InputStream in, Charset cs)  创建使用给定字符集的 InputStreamReader。 InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader。 InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。

功能方法

void close() 关闭该流并释放与之关联的所有资源。  String getEncoding() 返回此流使用的字符编码的名称。  int read() 读取单个字符。  int read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分。  boolean ready() 判断此流是否已经准备好用于读取。

OutputStreamWriter

构造方法

OutputStreamWriter (OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, Charset cs) 创建使用给定字符集的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创建使用给定字符集编码器的 OutputStreamWriter。 OutputStreamWriter(OutputStream out, String charsetName) 创建使用指定字符集的 OutputStreamWriter。

功能方法

void close() 关闭此流,但要先刷新它。  void flush() 刷新该流的缓冲。  String getEncoding() 返回此流使用的字符编码的名称。  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。  void write(int c) 写入单个字符。  void write(String str, int off, int len) 写入字符串的某一部分。

字符流和字节流的区别

操作单位不同:一个是字节,一个是字符。

操作中文(文档)的时候使用字符流更方便,字节流更广泛:文本、视频、音频、图片都可以。
字符流中有直接可以写字符串的方法。
字节流如果不关闭流也会写入文件,字符流必须经过刷新或者关闭,才会写入文件。
字符流关闭的时候会先刷新,关闭后不能使用,刷新之后可以继续操作。
当字符流写入数据较多时,可以使用刷新的方法提交数据。

字节数组流

不需要释放资源,close()函数只是为了风格统一

文件流

对接流

(可变参数)

标准步骤

  1. 创建源
  2. 选择流
  3. 操作
  4. 释放
package cn.chenye.io;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;public class IOTest {
public static void main(String[] args) {
//1.创建源 File src=new File("test.txt"); //2.选择流 try {
InputStream is =new FileInputStream(src); //3.操作(读取) int data1=is.read(); int data2=is.read(); int data3=is.read(); int data4=is.read(); int data5=is.read(); System.out.println((char)data1); System.out.println((char)data2); System.out.println((char)data3); System.out.println((char)data4); System.out.println((char)data5); //4.释放资源 is.close(); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

分段读取的实例

package cn.chenye.io;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;public class IOTest2 {
public static void main(String[] args) {
//1.创建源 File src=new File("test.txt"); //2.选择流 InputStream is=null; try {
is =new FileInputStream(src); //3.操作(分段读取) byte[] car=new byte[3];//缓冲容器 int len=-1;//接收长度 while((len=is.read(car))!=-1) {
//字节数组--》字符串 解码 //System.out.println((char)temp); String str=new String(car,0,len); System.out.println(str); } //4.释放资源 is.close(); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

文件字节流代码实例

package cn.chenye.io;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;/** * 文件字节流 * @author ASUS * */public class IOTest3 {
public static void main(String[] args) throws IOException {
//创建源 File dest=new File("desk.txt"); //选择流 OutputStream os=null; try {
os=new FileOutputStream(dest,true); String msg="I/O is so easy"; byte[] datas=msg.getBytes();//字符串--》字节数组 编码 os.write(datas, 0, datas.length); os.write(datas, 0, datas.length); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

文件拷贝(有冗余代码)

package cn.chenye.io;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;/** * 文件字节流 * @author ASUS * */public class Copy {
public static void main(String[] args) throws IOException {
//创建源 File src=new File("test.txt");//源头 File dest=new File("copytest.txt");//目的地 //选择流 OutputStream os=null; try {
FileInputStream is = new FileInputStream(src); os=new FileOutputStream(dest,true); //3.操作 分段读取 String msg="I/O is so easy"; byte[] datas=msg.getBytes();//字符串--》字节数组 编码 byte[] flush=new byte[1024]; int len=-1; while((len=is.read(flush))!=-1) {
os.write(flush, 0, len); } os.write(datas, 0, datas.length); os.write(datas, 0, datas.length); os.flush(); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

转载地址:http://xogwi.baihongyu.com/

你可能感兴趣的文章
字符数组的位置决定程序能否成功执行--不明白
查看>>
拷贝代码时没有仔细检查,导致误修改了函数参数
查看>>
MySQL批量导入数据SQL语句(CSV数据文件格式)
查看>>
ADO连接Oracle
查看>>
遍历Windows系统中所有进程的名字(*.exe)
查看>>
使用互斥量保证程序最多只有一个实例运行
查看>>
进程定点自杀
查看>>
进程看门狗
查看>>
线程看门狗
查看>>
调试代码的宏定义
查看>>
__FILE__和__FUNCTION__的使用
查看>>
创建、重命名文件
查看>>
文件大小保护
查看>>
先文件大小保护,再写文件
查看>>
目录创建
查看>>
日志文件系统的写日志函数
查看>>
删除目录下的文件
查看>>
删除指定目录下所有文件及目录
查看>>
判断文件夹名是否是合法YYYYMM格式
查看>>
检查日志文件系统
查看>>