JAVAIO学习

文章介绍了Java中的IO流概念,包括其用于在内存和文件之间传输数据的作用,以及流的分类。重点讨论了File类在文件和目录操作中的应用,如创建、读写属性检查。此外,文章还通过实例展示了字节流(FileInputStream和FileOutputStream)的使用,用于文件的读写操作,并给出了文件复制的示例代码。
摘要由CSDN通过智能技术生成

目录

前言

一、IO流

1.1引入:

1.2  IO流:

二、深入探讨IO流

2.1 IO流体系

2.2字节流

总结


前言

学习bilibili黑马程序员课程后 笔记总结


一、IO流

1.1引入:

内存 中不能永久化储存数据 ,程序停止,数据丢失——>那么需要存档 存到硬盘中的文件中——>文件的位置(通过file解决) 如何传输(需要IO流)

file:表示系统中的文件或者文件夹的路径

注意:file类只能对文件本身进行操作,不能读写文件里面存储的数据

1.2  IO流:

定义:储存和读取数据的解决方案。

作用:用于读写文件中的数据(可以读写文件,或网络中的数据...)

写(output)——> 程序中的数据保存到本地文件中去

读(input)<——    本地文件中的数据加载到程序中去

流的分类:

按照流的方向分:

 按照操作文件类型分:

纯文本文件:Windows自带的记事本打开能读得懂,例如:txt文件 md文件 xml文件 lrc文件(Word和Excel不是纯文本文件)

Java如何实现对文件和目录的操作?

Java作为一种面向对象语言,自然是通过对象,java将文件/目录的各种信息进行封装,如此就诞生了一个对象。通过对这个对象操作,就能获取文件的各种信息,以及进行创建、删除、修改等操作。

对文件/目录的操作:

package com.bluemsun.test;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class Test1 {
    public static void main(String[] args) throws IOException {
        File file = new File("resources");

        if(!file.exists()){
            file.mkdir();
        }
/*boolean mkdir() 方法可以创建此抽象路径的指定目录。只能创建一级的目录,且需要父目录存在。(不能用于创建多级目录)
如果你希望创建多级目录,使用此方法结果会返回false。

boolean mkdirs() 方法可以创建此抽象路径的指定目录。可用于创建多级目录。如果父级目录不存在,按照该路径一并创建。*/


        //文件操作常用方法
        System.out.println("文件是否可读:" + file.canRead());
        System.out.println("文件是否可写:" + file.canWrite());
        System.out.println("获取文件的名字:" + file.getName());
        System.out.println("获取该文件的上级目录:" + file.getParent());
        System.out.println("是否是一个目录:" + file.isDirectory());
        System.out.println("是否是一个文件:" + file.isFile());
        System.out.println("是否隐藏:" + file.isHidden());
        System.out.println("获取文件大小:" + file.length() );
        System.out.println("是否存在:" + file.exists());

        //文件路径
        System.out.println("绝对路径:"+file.getAbsolutePath());
        System.out.println("相对路径:"+file.getPath());
        System.out.println("toString:"+file);

        System.out.println("===============================================");

        for(int i = 1; i <= 5; i++){
            File file1 = new File("resources\\"+i+".txt");
            if(!file1.exists()){
                file1.createNewFile();
            }
        }
        File[] fileList = file.listFiles();
/*
public String[] list()	获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()(常用)	获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
*/
        for(File f : fileList){
            System.out.println(f.getName());
            System.out.println(f);
        }
    }
}

效果图

二、深入探讨IO流

2.1 IO流体系

2.2字节流

FileinputStream是对InputStream的继承;FileOutputStream是对OutputStream的继承

以FileOutputStream为例

实践: 在file中输出a

 “myio\\a.txt”为路径引用

嘿嘿嘿O(∩_∩)O哈哈~ 程序运行成功 好耶 

 原理分析:

 细节总结:

IO流分类:
在这里插入图片描述

实践:

我们先尝试着通过java程序分步完成文件的复制。
第一步:文件–->程序:FileReader
第二步:程序–->文件:FileWriter

package com.bluemsun;

import java.io.*;

public class FileWriterAndReader {
    public static void main(String[] args) throws IOException {
//=====================================================================================================
        File file = new File("b.txt");
//读取文件内容
        FileReader reader = new FileReader(file);
        if(!file.exists()){
            file.createNewFile();
        }
        int n = reader.read();
/*
FileReader类中对read()方法进行了重载,返回值均为int型,有参的方法,返回值即读取到的字符数,比较好理解,无参的方法返回一个0-65535范围内的整数,read的无参方法返回的int值即为读取到的字符的\u后面的十六进制转为十进制后的数
*/
        System.out.println(n);
        n = reader.read();
        System.out.println(n);
//        reader.close();
//         n = 0;
//        while((n = reader.read()) != -1){
//            SystemDemo.out.print((char)n);
//        }


        /**
         *      缓冲数组
         */
        // 3
//        char[] c = new char[2];
//        while((reader.read(c)) != -1){
//            String string = new String(c,0,c.length);
//            SystemDemo.out.print(string);
//        }
//        reader.close();
//======================================================================================================
        // 如果file不存在,会自动创建
        File file1 = new File("c.txt");
//        FileWriter writer = new FileWriter(file1);
//        FileWriter writer = new FileWriter(file1, true);
//        String str = "Hello bluemsun";
//        for(int i = 0; i < str.length(); i++){
//            writer.write(str.charAt(i));
//        }
//        writer.close();
//======================================================================================================

        FileWriter fileWriter = new FileWriter(file1, true);
//        int n = -1;
        while((n = reader.read()) != -1){
            System.out.print((char)n);
            fileWriter.write((char)n);
        }
        fileWriter.close();
        reader.close();


        //  缓冲数组
//        char[] c = new char[3];
//        while((n = reader.read(c)) != -1){
//            fileWriter.write(c,0,n);
//        }
//        fileWriter.close();
//        reader.close();
    }
}
//不知道为什么会吃掉开头的字符

效果图


 

总结

以上就是对JAVA IO 流的基本认识

关注博主 持续更新(^-^)V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值