io流-文件流

FileOutputStream类(jdk1.0)

描述

  • java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中。

构造方法

//构造方法
FileOutputStream?(File file) 创建文件输出流以写入由指定的 File对象表示的文件。  
FileOutputStream?(String name) 创建文件输出流以指定的名称写入文件。 
           *参数
           * file file:目的地是一个文件
           * string name:目的地是一个文件路径
//当你创建一个流对象时,必须先传递一个文件路径,该路径下,如果没有这个文件,会创建该文件
//,如果有这个文件,会清空这个文件中的数据。然后把你想要的数据写入中。

FileOutputStream(File file,boolean append);创建文件出入流以写入由指定的File对象表示的文件中。
FileOutputStream(String name,boolean append);创建文件输出流以指定的名称写入文件中
//这两个构造方法,参数中都需要传入一个Boolean类型的值,
//true表示的追加数据,false表示覆盖原文件

代码实例

public static void main(String[] args) throws IOException {
	//FileOutputStream?(String name) 创建文件输出流以指定的名称写入文件。
	FileOutputStream fops = new FileOutputStream("day28_IO\\a.txt");
	//调用写入方法
	fops.write(97);
	//关闭流
	fops.close();
}

图集分析

io流-文件流

数据的追加续写

  • 如何在保留文件中的数据,还能继续添加新的数据到目标文件中?
  • 使用带两个参数地构造方法

代码实例

	//创建对象
	File file = new File("day28_IO\\c.txt");
	FileOutputStream fops = new FileOutputStream(file,true);
	//调用write方法写入
	fops.write("张三".getBytes());
	//关闭流
	fops.close();

写入换行

  • windows系统里,换行符是: \r \n。把以指定是否需要追加续写换行。
    linux系统中,换行符号是: /r /n.
    mac系统中,换行符号是 :/r
    unix系统里,每行结尾只有换行,即: \n

  • 回车符\r和换行符\n
    回车符:回到一行的开头。
    换行符:下一行(new Line)。

  • 系统中的换行:
    windows系统中,每行结尾是:回车加换行。即,\r\n。
    Linux系统中,每行的结尾只有换行,即,/n。
    mac系统中,每行的结尾是回车,即,/r。

FileInputStream类

描述

  • java.io.FileInputStream 类是文件输入流,从文件中读取字节。

常用方法

//构造方法
FileInputStream?(File file)  通过打开与实际文件的连接来创建一FileInputStream ,该文件由文件系统中的 File对象 file命名。  
FileInputStream?(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
//当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileFoundException。
//普通方法
int available?() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。  

读取数据的原理

  • java --> JVM --> OS --> OS调用系统中读取数据的方法 -->读取文件中的数据

代码实例

public static void main(String[] args) throws IOException {
	FileInputStream fis = new FileInputStream("C:\\c.txt");
	int len = 0;
	byte[] bytes = new byte[1024];
	while ((len = fis.read(bytes)) != -1) {
		//System.out.println(new String(bytes));
		System.out.println(new String(bytes, 0, len));
	}
	fis.colos();
}
//可以使用字节数组来读取数据:read(byte[] b):从输入流中读取多个字节,并且将其存储到缓冲区数组b当中
  • 备注;使用数组读取,每次可以读取多个字节,减少系统间的io操作次数,从而提高了读取的效率,建议使用。

  • 练习从系统中读取一个图片复制到桌面上

    //1.创建一个字节输入流对象,构造方法中绑定需要读取的路径
    //2.创建一个字节输出流对象,构造方法中绑定需要写入的文件
    //3.使用字节输入流对象中的read方法读取文件
    //4.使用字节输出流对象中的write方法,把读取到字节写入到指定的文件中
    //5.释放资源(先开的后关,后开的先关/相当于栈)
    //复制文件
    public static void main(String[] args) throws IOException {
        //来源
        File source = new File("D:\\aa.jpeg");
        //目的地
        File destination = new File("E:\\bb.jpeg");
        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(destination)
        ) {
            System.out.println(fis.available() + "available");
            //public int available?() throws IOException 获取文件字节
            byte[] arr = new byte[fis.available()];
            int a = 0;
            while ((a = fis.read(arr)) != -1) {
                fos.write(arr);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

io流-文件流

上一篇:dinic板子


下一篇:Increasing Subsequence