IO流

IO流输出写入方法

java.io.OutputStream;字节输出流
此抽象类是表示输出字节流的所有类的超类
定义了一些子类共性的成员方法:
public void close():关闭此输出流并且释放与此流相关联的任何系统资源
public void flush():刷新此输出流并且强制任何缓冲的输出字节被写出
public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流
public abstract void write(int b):将指定的字节输出流
java.io.FileOutputStream extends OutputStream
FileOutputStream:文件字节输出流
作用:把内存中的数据写入到硬盘的文件中。
构造方法;FileOutputStream(String name)创建一个向具有指定名称文件中写入数据的输出文件流
FileOutputStream(File file)创建一个向指定File对象表示的文件中写入数据的文件输出流
参数:写入数据的目的地。String name:目的地是一个文件的路径。File file:目的地是一个文件
构造方法的作用:1、创建一个FileOutputStream的对象
2、会根据构造方法中传递的文件/文件路径,创建一个空的文件
3、会把FileOutputStream对象指向创建好的文件
写入数据的原理(内存–>硬盘)
java程序–>JVM(java虚拟机)–>OS(操作系统)–>OS调用写数据的方法–>把数据写入到文件中
字节输出流的使用步骤(重点):
1、创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
2、调用FileOutputStream对象中的方法write,把数据写入到文件中
3、释放资源(流使用会占用一定的空间,使用完毕要把内存清空,提高程序的效率)

public class demo01 {
    public static void main(String[] args) throws IOException {
        //创建一个FileOutputStream对象,构造方法中传递写入数据的目的地
        FileOutputStream fos=new FileOutputStream("C:\\Users\\ASUS\\Desktop\\其他文件");
        //调用FileOutputStream对象中的方法write,把数据写入到文件中
        fos.write(97);
        fos.close();
    }
}

一次写入多个字节的方法:

public void write(byte[] b):将b.length字节从指定的字节数组写入此输出流
public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始到此输出流

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo02 {
    public static void main(String[] args) throws IOException {
        //创建一个FileOutputStream的对象,构造方法中绑定要写入数据的目的地
        FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\ASUS\\Desktop"));
        //调用FileInputStream对象中的方法write,把数据写入到文件中
        //在文件中显示100
        byte[] bytes={65,66,67,68,69};
        /*public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始到此输出流
        int off:数组开始索引。int 冷:写几个字节*/
        fos.write(bytes,1,2);
        /*写入字符的方法:可以使用String类中的方法,转换字节为字节数组*/
        fos.close();
    }
}

追加写/续写

追加写/续写:使用两个参数的构造方法
FileOutputStream(String name,boolean append)创建一个具有指定name的文件中写入数据的输出流
FileOutputStream(File file,boolean append)创建一个指定Fil对象表示的文件中写入数据的文件输出流
参数:String name,File file:写入数据的目的地
boolean append:追加开关
true:创建对象不会覆盖原文件,继续在文件的末尾追加数据
false:创建一个新文件,覆盖原文件
写换行:需要用换行符号
windows系统:\r\n
linux系统:/n
mac系统:/r

import java.io.FileOutputStream;
import java.io.IOException;
public class demo04 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("E:\\编程");
        fos.write("你好".getBytes());
        for(int i=0;i<5;i++) {
            fos.write("123".getBytes());
            fos.write("\r\n".getBytes());
        }
        fos.close();
    }
}

文件字节输入流

java.io.InputStream:字节输入流
此抽象类是表达字节输入的所有类的超体
定义了所有子类的共性的方法:
int read()从输入流读取数据的下一个字节。
int read(byte[] b)从输入流中读取一定数量的字节,并且将其存储在缓冲区数组b中
void close()关闭此输入流并且释放该流的所有资源
java.io.FileInputStream extents InputStream
FileInputStream:文件字节输入流
作用:把硬盘文件中的数据读取到内存中使用
构造方法:FileInputStream(String name)
FileInputStream(File file)
参数:读取文件的数据源
String name:文件的路径
File file:文件
构造方法的作用:1、会创建一个FileInputStream的对象
2、会把FileInputStream对象指定构造方法中要读取的文件
字节输入流的使用步骤(重点):
1、创建FileInputStream对象,构造方法中绑定要读取的数据源
2、使用FileInputStream对象重点方法read,读取文件
3、释放资源

import java.io.FileInputStream;
import java.io.IOException;
public class demo03 {
    public static void main(String[] args) throws IOException {
        //创建FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis=new FileInputStream("E:\\编程");
        int len=fis.read();//使用FileInputStream对象中的方法read读取文件,这个方法只读取一个文件就返回,读到末尾返回-1
        System.out.println(len);
        /*可以使用循环优化的方法来读取文件,用while来循环
        布尔表达式(len =fis.read())!=-1
           1、fis。read():读取一个字节
           2、len=fis.read():把读到的字节赋值给变量len
           3、(len=fis.read())!=-1:判断len是否不等-1
          */
        int len1=0;//记录读取到的字节
        while((len1=fis.read())!=-1){
            System.out.println((char) len1);
        }
        fis.close();//释放资源
    }
}

字节输入流一次输入多个字节的方法

字节输入流一次输入多个字节的方法:
int read(byte[] b)从输入流中读取一定数量的字节,并且将其存储在缓冲区数组b中
明确两件事:1、方法参数byte[]作用?
起到缓冲作用,存储每次读取到的多个字节,数组长度把定义为1024(1Kb)或者1024的整数倍
2、方法返回值是什么?
每次读取的字节数
String类的构造方法:String(byte[] bytes):把字节数组转换为字符串
String(byte[] bytes,int offset,int length)把字节数组的一部分转换为字符串offset:数组开始索引 length:转换的字节个数

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class demo05 {
    public static void main(String[] args) throws IOException {
        //创建FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis=new FileInputStream("E:\\编程\\a.txt");
        //使用FileInputStream对象中的read读取文件
        //int read(byte[] b)从输入流中读取一定数量的字节,并且将其存储在缓冲区数组b中
        byte [] bytes=new byte[2];
        int len=fis.read(bytes);
        System.out.println(len);
        System.out.println(Arrays.toString(bytes));
        System.out.println(new String(bytes));
        //可以用一个while循环
        byte[] bytes1=new byte[1024];
        int len1=0;
        while((len1=fis.read(bytes))!=-1){
            //String(byte[] bytes,int offset,int length)把字节数组的一部分转换为字符串offset:数组的开始索引length:转换的字节个数
            System.out.println(new String(bytes,0,len1));
        }
        fis.close();
    }
}

练习

练习复制:一读一写
明确数据源和数据源的目的地
复制文件步骤:1、创建一个字节输入流对象,构造方法绑定要读取的数据源
2、创建一个字节输出流对象,构造方法中绑定要写入的数据的目的地
3、使用字节输入流对象,构造方法中绑定要写入的目的地
4、使用字节输出流中的方法write,把读取到的字节写入到目的地等的文件中
5、释放资源

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo04 {
    public static void main(String[] args) throws IOException {
        long time1=System.currentTimeMillis();
        //创建一个字节输入流对象,构造方法绑定要读取的数据源
        FileInputStream fis=new FileInputStream("E:\\编程");
        //创建一个字节输出流对象,构造方法中绑定要写入的数据的目的地
        FileOutputStream fos=new FileOutputStream("D:\\编程");
        /*一次读取一个字节写入一个字节的方法
        使用字节输入流对象,构造方法中绑定要写入的目的地
        int len=0;
        while((len=fis.read())!=-1){
            fos.write(len);
        }*/
        /*使用数组缓冲读取多个字节,写入多个字节*/
        byte[] bytes=new byte[1024];
        int len=0;//每次读取的有效字节个数
        while((len=fis.read(bytes))!=-1) {
            fos.write(bytes, 0, len);
        }
        long time2=System.currentTimeMillis();
        System.out.println("程序运行时间:"+(time2-time1));
        fos.close();
        fis.close();
    }
}

字符输出流

java.io.writer: 字符输出流,是所有字符输出流的最顶层父类,是一个抽象类
共性的成员方法:1、void writer(int c)写入单个字符
2、void writer(char[] cbuf)写入字符数组
3、abstract void writer(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组开始索引,len写的字符个数
4、void writer(String str)写入字符串
5、void writer(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数
6、void flush()刷新该流的缓冲
7、void close()关闭此流,但是要刷新它
java.io.FileWriter extends OutputStreamWriter extends Writer
FileWriter:文件字符输出流
作用:把内存中字符数据写入到文件中
构造方法:1、FileWriter(File file)根据给定的File对象构造一个FileWriter对象
2、FileWriter(String fileName)根据给定的文件名构造一个FileWriter对象
参数:写入数据的目的地
String fileName:文件路径。File file:是一个文件
构造方法的作用:1、会创建一个FileWriter对象
2、会根据构造方法中传递文件或者文件夹的路径,创建文件夹
3、会根把FileWriter对象指向创建好的文件
字符输出流的使用步骤(重点):1、创建FileWriter对象,构造方法中绑定要写如数据的目的地
2、使用FileWriter中的方法writer,把数据写入到内存缓冲区中(字符转换城子街的过程)
3、使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
4、释放资源(会先把内存缓冲区的数据刷新到文件中)

import java.io.FileWriter;
import java.io.IOException;
public class demo02 {
    public static void main(String[] args) throws IOException {
        //创建FileWriter对象,构造方法中绑定要写如数据的目的地
        FileWriter fe=new FileWriter("C:\\");
        //使用FileWriter中的方法writer,把数据写入到内存缓冲区中(字符转换城子街的过程)
        //void writer(int c):写入单个字符
        fe.write(97);
        //使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中
        fe.flush();
        fe.close();
    }
}

字符输出流写数据的其他方法

1、void writer(int c)写入单个字符
2、void writer(char[] cbuf)写入字符数组
3、abstract void writer(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组开始索引,len写的字符
4、void writer(String str)写入字符串
5、void writer(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数

import java.io.FileWriter;
import java.io.IOException;
public class demo03 {
    public static void main(String[] args) throws IOException {
        FileWriter fr=new FileWriter("C:\\123.txt");
        char[] cs={'a','d','g'};//void writer(char[] cbuf)写入字符数组
        fr.write(cs);
        //abstract void  writer(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组开始索引,len写的字符
        fr.write(cs,1,2);
        //void writer(String str)写入字符串
        fr.write("我的名字");
        //void writer(String str,int off,int len)写入字符串的某一部分,off字符串的开始索引,len写的字符个数
        fr.write("wodmingz",2,3);
        fr.close();
    }
}

续写和换行

续写,追加写:使用两个参数的构造方法:
FileWriter(String fileName,boolean append)
FileWriter(File file,boolean)
参数:String fileName,File file:写入数据的目的地
boolean append:续写开关 true:不会创建新文件覆盖原文件,可以续写。false:创建新文件覆盖原文件
换行:换行符号windows:\r\n。linux:/n。mac:/r

import java.io.FileWriter;
import java.io.IOException;
public class demo04 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("C:\\123.txt");
        for(int i=0;i<5;+i+){
            fw.write("helloWorld"+i+"\r\n");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值