Java-IO

Java-IO

1.简介

(1) I/O:输入Input/输出Ouput,位于java.io包下
(2) I/O分类:
根据数据的流向分为:输入流和输出流。
输入流 :把数据从其他设备上读取到内存中的流。
输出流 :把数据从内存 中写出到其他设备上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。
(3) 父类:
在这里插入图片描述

2.OutputStream字节输出流

  • public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

  • public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

  • public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。可一次写多个字节

  • public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。可一次写多个字节

  • public abstract void write(int b) :将指定的字节输出流。

  • java.io.FileOutputStream extends OutputStreamFileOutputStream:文件字节输出流,
    作用:把内存中的数据写入到硬盘的文件中
    注:write方法传递的的是
    ======================================================================================

  • 注意:完成流的操作时,必须调用close方法,释放系统资源。

  • 字节输出流的使用步骤(重点):
    1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
    2.调用FileOutputStream对象中的方法write,把数据写入到文件中
    3.释放资源(流使用完毕要把内存清空,提供程序的效率)

(1)数据追加续写:

public FileOutputStream(File file, boolean append) :创建文件输出流以写入由指定的 File对象表示的文件。
public FileOutputStream(String name, boolean append) :创建文件输出流以指定的名称写入文件
参数中都需要传入一个boolean类型的值(append),true 表示追加数据,false 表示清空原有数据。

(2)换行

回车符\r 和换行符\n :
回车符:回到一行的开头(return)。
换行符:下一行(newline)。
系统中的换行:
Windows系统里,每行结尾是 回车+换行 ,即\r\n ;
Unix系统里,每行结尾只有 换行 ,即\n ;
Mac系统里,每行结尾是 回车 ,即\r 。

import java.io.FileOutputStream;
import java.io.IOException;

public class File0 {
    public static void main(String[] args) throws IOException {
        FileOutputStream a=new FileOutputStream("E:\\lab\\1.txt",false);//append-false覆盖原文件,true不覆盖
        a.write(97);//输入a
        byte[] b="97".getBytes();
        a.write(b);//输入97
        a.write("wfwf".getBytes());//输入wfwf
        for (int i = 0; i < 5; i++) {
            a.write("123".getBytes());
            a.write("\r\n".getBytes());
        }
        a.close();
    }
}

3.InputStream

java.io.FileInputStream 类是文件输入流,从文件中读取字节。
使用方法类似:FileOutputStream :

public class FileInputStreamConstructor throws IOException{
	public static void main(String[] args) {
	// 使用File对象创建流对象
		File file = new File("a.txt");
		FileInputStream fos = new FileInputStream(file);
	// 使用文件名称创建流对象
		FileInputStream fos = new FileInputStream("b.txt");
	}
}

读取字节数据:

read 方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾时,返回-1。

import java.io.FileInputStream;
import java.io.IOException;

public class File1 {
    public static void main(String[] args) throws IOException {
        FileInputStream a=new FileInputStream("E:\\lab\\1.txt");
        int b=a.read();
        System.out.println(b);
        while (b!=-1){
            b=a.read();
            System.out.println(b);
        }//最终返回-1停止
        a.close();
    }
}

字节流

读取

read 方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1 ,循环读取,代码使用演示:

public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
	FileReader fr = new FileReader("read.txt");
// 定义变量,保存有效字符个数
	int len ;
// 定义字符数组,作为装字符数据的容器
	char[] cbuf = new char[2];
// 循环读取
	while ((len = fr.read(cbuf))!=1) {
		System.out.println(new String(cbuf));
	}
// 关闭资源
	fr.close();
}
输出

java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

void write(int c) 写入单个字符。
void write(char[] cbuf) 写入字符数组。
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len
写的字符个数。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个
数。
void flush() 刷新该流的缓冲。
void close() 关闭此流,但要先刷新它。

如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。
flush :刷新缓冲区,流对象可以继续使用。
close :先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

FileWriter fw = new FileWriter("fw.txt");
// 写出数据,通过flush 
fw.write('刷'); // 写出第1个字符 fw.flush();
fw.write('新'); // 继续写出第2个字符,写出成功
fw.flush();
// 写出数据,通过close 
fw.write('关'); // 写出第1个字符 fw.close();
fw.write('闭'); // 继续写出第2个字符,【报错】
fw.close();

缓冲流

字节缓冲流: BufferedInputStream , BufferedOutputStream
字符缓冲流: BufferedReader , BufferedWriter
创建字节缓冲流:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
转换流

IDEA默认是UTF-8,但Windows是GBK,会产生乱码
InputStreamReader:字节👉字符
OutputStreamWriter:字符👉字节

public static void main(String[] args) {
String srcFile = "a.txt";//(GBK)
String destFile = "b.txt";//(UTF-8)
InputStreamReader isr = new InputStreamReader(new FileInputStream(srcFile) , "GBK");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(destFile));
// 读写数据
//定义数组
char[] cbuf = new char[1024];
// 定义长度
int len;
// 循环读取
while ((len = isr.read(cbuf))!=1) {
// 循环写出
osw.write(cbuf,0,len);
}
osw.close();
isr.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂糊Java汤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值