java IO流

File 类

  1. File类的一个对象,代表一个文件 或者一个文件目录(俗称文件夹)
  2. File类声明在java.io包下
  3. File类中涉及到关于文件或者文件目录的创建,删除,重命名,修改时间,文件大小等方法,并涉及到写入或读取文件内容的操作,如果需要读取或者写入文件内容,必须使用io流来完成
  4. 后续File类的对象常常会作为参数传递到流的构造中,指明读取或者写入的终点

常用构造器

File(String filepath)

File(String ParentPath,String childpath)

File(File parentFile,String childpath)

路径的分类

  • 相对路径 :相较于某个路径下指明的路径
  • 绝对路径:包含盘符在内的文件或者文件目录的路径

路径分隔符

windows:\\

unix:/

File类的常用方法

public String getAbsoulatePath();//获取绝对路径

public String getPath();//获取路径

public String getName();//获取名称

public String getParent();获取上层文件目录路径,若没有,返回null

public long length();获取文件长度

public long lastModified();//获取最后一次修改时间,毫秒

public String []list();获取指定目录下的所有文件或者文件目录的名称数组

public File [] listFiles();//获取指定目录下的所有文件或者文件目录的File数组

File类的重命名功能

public Boolean renameTo(File dest);//把文件重命名为指定的文件路径

File类的判断功能

public boolean isDirectory();//判断是否是文件目录

public boolean isFile();//判断是否是文件

public boolean exists();//判断是否存在

public boolean canRead();//判断是否可读

public boolean canWrite();判断是否可写

public boolean isHidden();判断是否隐藏

File类的创建功能

public boolean mkdir();创建文件目录,如果存在,不创建,如果此文件目录的上层目录不存在,也不创建

public boolean mkdirs();创建文件目录,如果上层文件目录不存在,一并创建

File类的删除功能

public boolean delete();删除文件或者文件夹

注意事项,java的删除不走回收站,要删除文件夹,此文件夹内不能包含文件或者文件夹

java Io 流

Io流原理概述

谷歌的io寓意为 开放中创新 innovation in the Open,还有一种解释就是Input/Output,I/o技术是非常实用的技术,用于读写文件,网络通讯等。处理设备之间的数据传输,java程序中,对于数据的输入/输出操作以“流(stream)”的方式进行。java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过标准的方法输入或者输出数据,输入输出(站位是不同的是一个相对的概念)

流的分类

  • 按操作的数据单位不同分为:字节流和字符流(纯文本)
  • 按流的角色不同分为,节点流,处理流
抽象基类字节流字符流
输入流InputStreamReader
输出流OutPutStreamWriter

1.java的Io流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。

2.由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀

Io流体系

分类字节输入流字节输出流字符流输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件(节点流)FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedInputStreamPipedOutputStreampipedReaderpipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedRederBufferedWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
FileInputStreamFileOutputStreamFileReaderFileWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream

抽象基类和访问文件我们叫节点流,后面的叫处理流

我们重点需要关注的是抽象基类 ,访问文件,缓冲流,转换流,对象流

字符流 (只能操作纯文本)

FileReader
//对于流的操作,创建之后,要关闭
//对于关闭操作,try catch处理,避免空指针异常
public void testReader() throws IOException{
        //将hello.txt的内容读取到程序,输出到控制台
        //1.实例化文件类,指明我们要操作的文件
        File file = new File("E:\\tool\\ideaproject\\factory\\hello.txt");
​
        //2.提供具体的流(纯文本文件)
        FileReader fileReader = new FileReader(file);
        //3.数据的读入
        //read()方法,返回读入的一个字符,如果到文件末尾了,返回-1
        int data;
        while ((data=fileReader.read())!= -1) {
            System.out.println((char) data);
            data = fileReader.read();
​
            //4.流的关闭操作
           try{
                if (fileReader!=null)
                fileReader.close();
            }catch (IOException e){
             e.printStackTrace();
            }
        }
    }
​
//可以使用read()的重载方法
char[]cbuf=new char[5];
fileReader.read(cubf);//同样也是到末尾返回-1,一次性读取5个
//FileWriter,写的时候没有文件会创建,不会notfind异常
* 节点流(或者叫它文件流)    缓冲流(是处理流的一种,是作用在节点流之上的)
 * FileInputStream         BufferInputStream
 * FileOutputStream        BufferOutputStream
 * FileReader              BufferReader
 * FileWriter              BufferWriter
 * */
public class TestReaderAndWriter {
    public static void main(String[] args) {
    }
    @Test
    public void testReader() throws IOException{
        //将hello.txt的内容读取到程序,输出到控制台
        //1.实例化文件类,指明我们要操作的文件
        File file=new File("hello.txt");
        //2.提供具体的流(纯文本文件)
        FileWriter fw = new FileWriter(file);
        //3.数据的写出
        fw.write("i have a dream");
        fw.write("you need have a dream");
        //4.流的关闭
 }
//读进来写出去的话就是复制的概念

字节流

//FileInputStream
public void testReader() throws IOException{
        //1.实例化文件类,指明我们要操作的文件
        File file=new File("hello.txt");
        //2.提供具体的流(纯文本文件)
        FileInputStream fis = new FileInputStream(file);
        //3.数据的读写
        byte[] bytes = new byte[5];//因为我们是字节流,所以要创建一个字节数组
        int len=fis.read(bytes);//记录每次读取的字节个数
        while(len!=-1){
            String str=new String(bytes,0,len);
            System.out.println(str);
        }
        //4.流的关闭
        fis.close();
    }
}
​
//处理非文件
//文件对象
File a=new File("1.jpg")
File b=new File("2.jpg")
//流对象
FileInputStream fis=new FileInputStream("a");
FileOutPutStream fia=new FileOutPutStream("b");
​
//FileOutputStream的用法是一样的,都是四步,在流的操作这里,基本上所有操作是差不多的。

标准输入输出流

  • System.in:标准输入流,默认从键盘输入
  • System.out:标准输出流,默认从控制台输出
  • 可以使用System类的setIn(InputStream in)/setOut(printStream out)对默认设备进行更改
public class TestSys {
    /*
    * 可以使用Scanner
    * 可以使用System.in*/
    @Test
    public void test1() throws IOException {
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        while(true){
            String data=bufferedReader.readLine();
            if("e".equalsIgnoreCase(data)||"exit".equalsIgnoreCase(data)){
                System.out.println("程序结束");
                break;
            }
        }
        bufferedReader.close();
    }
}
​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值