JAVA基础-----IO流基本概念

Posted 敲代码的xiaolang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA基础-----IO流基本概念相关的知识,希望对你有一定的参考价值。


前言

其实写io流类的文章有很多,不过近期要考试了,内容是io流,就当整理下来复习一下,也许写的和很多大佬相比相差很多,所以不足之处还请各位师傅不吝赐教。本博文代码主要参考b站鸟哥JAVA零基础之IO流详解视频【IntelliJ IDEA版-输入输出流】以及自己的一些补充。


一、文件的简单操作

1.文件的创建

书上对于io流的讲解较为生涩,先从文件的处理入手,下面代码演示的是创建一个新的文件,是否成功取决于你电脑此路径下有没有这个文件,如果文件存在那么创建失败,如果不存在则创建成功
同理,我们对于文件夹,以及文件夹下套文件夹,也就是多级文件夹都可以进行相似的操作,具体操作如代码所示。

package homework;//CSDN-敲代码的xiaolang

import java.io.File;
import java.io.IOException;

public class File_Demo01 
    public static void main(String[] args) 
        try 

            File file1 = new File("E:\\\\test.txt");
            boolean flag1 = file1.createNewFile();//创建一个新的文件,如果文件存在那么创建失败,如果不存在则创建成功。
            System.out.println(flag1?"文件创建成功":"文件创建失败");

            File file2 = new File("E:\\\\java_test");
            boolean flag2 = file2.mkdir();//创建一个新的文件夹
            System.out.println(flag2?"文件夹创建成功":"文件夹创建失败");

            File file3 = new File("E:\\\\java_io\\\\io\\\\test");
            boolean flag3 = file3.mkdirs();//创建一个新的多级文件夹
            System.out.println(flag3?"多级文件夹创建成功":"多级文件夹创建失败");

         catch (IOException e) 
            e.printStackTrace();
        
    


运行结果如图所示,你也可以在你的电脑对应路径下面找到相应的文件。

2.文件的删除

对于删除操作,这里先简单使用delete方法,我们直接让文件去调用即可。

package homework;//CSDN-敲代码的xiaolang

import java.io.File;

public class File_Demo02 
    public static void main(String[] args) 
        File file1 = new File("E:\\\\test.txt");
        boolean flag = file1.delete();
        System.out.println(flag?"文件删除成功":"文件删除失败");
    


3.文件是否存在

原理也是比较简单的,我们先判断是否存在,使用exists方法。

package homework;//CSDN-敲代码的xiaolang

import java.io.File;

public class File_Demo03 
    public static void main(String[] args) 
        File file = new File("E:\\\\test");
        boolean flag = file.exists();
        if(flag)
            System.out.println("文件已经存在");
        else
            file.mkdir();
        
    


4.文件内所包含字节数

我们事先在file文件里面写入xiaolang,然后使用length方法去返回所含字节的大小。

String字符串:length(),返回字符串中字符的个数
数组,数组名.length ,属性,获取数组里面元素的个数
集合, 集合对象名.size(),返回集合中元素的个数

package homework;//CSDN-敲代码的xiaolang

import java.io.File;
import java.io.IOException;

public class File_Demo04 
    public static void main(String[] args) 
        File file = new File("E:\\\\xiaolang.txt");
        try 
            file.createNewFile();
            Long size = file.length();
            System.out.println("size="+size);
         catch (IOException e) 
            e.printStackTrace();
        
    



5.文件的名字和路径

package homework;//CSDN-敲代码的xiaolang

import java.io.File;
import java.io.IOException;

public class File_Demo04 
    public static void main(String[] args) 
        File file = new File("E:\\\\xiaolang.txt");
        try 
            String fileName = file.getName();
            System.out.println("fileName="+fileName);

            String path = file.getPath();
            System.out.println("path="+path);

         catch (Exception e) 
            e.printStackTrace();
        
    


6.使用递归的方法扫描文件夹

思路就是:先判断文件是否是文件夹,是文件夹的话,选择某个文件夹下所有文件,如果不是文件夹,获取此文件夹的路径。

package homework;//CSDN-敲代码的xiaolang

import java.io.File;

public class File_Demo05 
    public static void showFile(String pathname)
        File file = new File(pathname);
        boolean flag = file.isDirectory();
        if(flag)
            File[] files = file.listFiles();
            for(int i =0;files!=null&&i<files.length;i++)
                boolean flag1 = files[i].isDirectory();
                if(flag1)
                    showFile(files[i].getPath());
                else
                    String filePath = file.getPath();
                    System.out.println("普通文件---》"+filePath);
                
            
        else
            String filePath = file.getPath();
            System.out.println("普通文件---》"+filePath);
        
    

    public static void main(String[] args) 
        File_Demo05.showFile("E:\\\\");//扫描E盘
    


我的E盘基本没有文件,所以比较容易看到所有的结果。

二、输入输出流

首先用一张图带你了解基本模式:

1.FileInputStream

代码部分注释掉的部分和下面引用中代码的意思是一样的,只不过更加简洁。

FileInputStream fileInputStream = new FileInputStream(“E:\\xiaolang.txt”);

package homework;//CSDN-敲代码的xiaolang

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class File_Demo06 
    public static void main(String[] args) 
        try 
             /*File file = new File("E:\\\\xiaolang.txt");
            if(file.exists()&&file.length()>0)
            FileInputStream fileInputStream = new FileInputStream(file);
        */
            FileInputStream fileInputStream = new FileInputStream("E:\\\\xiaolang.txt");

            int ch = 0;
            while((ch=fileInputStream.read())!=-1)
                System.out.println((char)ch);//控制换行
            
            fileInputStream.close();
         catch (Exception e) 
            System.out.println("文件找不到");
        
    


2.FileOutputStream

下面的栗子是我在E盘创建了一个文件,然后把它拷贝到我们的D盘去,这里注意使用file去调用read方法,而使用file1去调用write方法,然后我们统计一下所需要耗费的时间。

package homework;//CSDN-敲代码的xiaolang

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class File_Demo08 
    public static void main(String[] args) 
        try 
            long startTime = System.currentTimeMillis();
            FileInputStream file = new FileInputStream("E:\\\\xiaolang.txt");
            FileOutputStream file1 = new FileOutputStream("D:\\\\xiaolang.txt");
            int ch = 0;
            while ((ch = file.read()) != -1) 
                file1.write(ch);
            
            file.close();
            file1.close();
            long endTime = System.currentTimeMillis();
            System.out.println("共消耗"+(endTime-startTime)+"ms");
         catch (Exception e) 
            System.out.println("文件找不到");
        
    


3.BufferedInputStream

我们对上面的栗子进行一些改动,我们使用BufferedInputStream去更快的读取文件,BufferedInputStream继承于FilterInputStream,本质上是通过一个内部缓冲区数组实现的,用read读取输入流的数据时,BufferedInputStream会将该输入流的数据分批次的导入缓冲区。当缓冲区中的数据被读完后,输入流会再次填充缓冲区中的数据;如此循环往复下去,直到读完输入流数据结束。

package homework;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class File_Demo09 
    public static void main(String[] args) 
        InputStream inputStream = null;
        try 
            inputStream = new FileInputStream("E:\\\\xiaolang.txt");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
         catch (FileNotFoundException e) 
            e.printStackTrace();
        
    


获取时间差和所含字节数:

package homework;//CSDN-敲代码的xiaolang

import jdk.swing.interop.SwingInterOpUtils;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class File_Demo09 
    public static void main(String[] args) 
        InputStream inputStream = null;
        try 
            long startTime = System.currentTimeMillis();
            inputStream = new FileInputStream("E:\\\\xiaolang.txt");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            byte[] temp = new byte[1024];
            int len = 0;
            while((len = bufferedInputStream.read(temp))!=-1)
                System.out.println(len);
            
            long endTime = System.currentTimeMillis();
            System.out.println("共消耗"+(endTime-startTime)+"ms");
         catch (Exception e) 
            e.printStackTrace();
        
    


4.FileReader读取文件所含字节数

package homework;//CSDN-敲代码的xiaolang

import java.io.FileNotFoundException;
import java.io.FileReader;

public class File_Demo10 
    public static void main(String[] args) 
        try 
            FileReader fileReader = new FileReader("E:\\\\xiaolang.txt");
            char[] temp = new char[1024];
            int len = 0;
            while((len=fileReader.read(temp))!=-1)
                System.out.println(len);
            
            fileReader.close();
         catch (Exception e) 
            e.printStackTrace();
        

    


5.FileReader获取文本内容

package homework;//CSDN-敲代码的xiaolang

import java.io.FileNotFoundException;
import java.io.FileReader;

public class File_Demo10 
    public static void main(String[] args) 
        try 
            FileReader fileReader = new FileReader("E:\\\\xiaolang.txt");
            char[] temp = new char[1024];
            int len = 0;
            while((len=fileReader.read(temp))!=-1)
                String s = new String(temp,0,len);
                System.out.println(s);
            
            fileReader.close();
         catch (Exception e) 
            e.printStackTrace();
        

    


6.FileWriter修改文本内容

这个栗子是直接写入:“玛卡巴卡balabala”

package homework;//CSDN-敲代码的xiaolang

import java.io.FileWriter;
import java.io.IOException;

public class File_Demo11 
    public static void main(String[] args) 
        try 
            String s = "玛卡巴卡balabala";
            FileWriter fileWriter = new FileWriter("E:\\\\makabaka.txt");
            fileWriter.从设计模式角度理解Java IO基本概念

java 基础--IO 输入流

Java基础:IO流之字节流和字符流

java基础——流体系,字符流和字节流基本用法

java基础——IO流

java基础之io流总结二:File类基本应用