前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java基础差缺补漏系列之I/O流系列1

Java基础差缺补漏系列之I/O流系列1

作者头像
冷环渊
发布于 2021-10-19 07:33:55
发布于 2021-10-19 07:33:55
29300
代码可运行
举报
运行总次数:0
代码可运行

io流

每日格言:

千里之行,始于足下——老子

file类

文件,目录

文件:内存中存放的数据计算机关机后会消失,要长久的保存数据,就要使用硬盘,光盘等,为了便于数据的管理和检索,引入了文件的概念,可以有一篇文章,一段视频,一个可执行程序。

目录(文件夹):

成千上万的文件,如果不分类的话,会很难管理,于是我们用文件夹去分类,管理。

操作系统:

如果需要查看文件/目录星系,右键属性就好了,

现在我想用java来操纵文件/目录,我该如何?

java程序最典型的特点,面向对象,java程序最擅长的就是操纵对象,盘符上的 文件目录,将它们的各种信息封装,封装成一个对象,

java最擅长就是操作对象,这个对象属于—》file类

盘符上的文件—》封装为对象—?对象属于file类的对象–》有了这个对象,我们的程序就可以直接操作这个对象,通过获取文件的各种信息,还可以对文件进行操作,创建或者删除等等等.

对文件的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   public static void main(String[] args) throws IOException {
        File f = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\src\\test.txt");
        File f1 = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\src\\test.txt");//跨平台建议使用这种
//   常用方法
        System.out.println("文件是否可读 : "+f.canRead());
        System.out.println("文件是否可写 : "+f.canWrite());
        System.out.println("文件的名字 : "+f.getName());
        System.out.println("文件的上级目录 :"+f.getParent());
        System.out.println("是否是一个目录 :"+f.isDirectory());
        System.out.println("是否是一个文件 :"+f.isFile());
        System.out.println("是否隐藏 :"+f.isHidden());
        System.out.println("文件大小 : "+f.length());
//        if (f.exists()){ 如果有那就删除,没有就创建
//                f.delete();
//        }else {
//            f.createNewFile();
//        }
        System.out.println(f==f1);
        System.out.println(f.equals(f1));
        //和路径相关的
        System.out.println("绝对路径 :"+f.getAbsolutePath());
        System.out.println("相对路径 :"+f.getPath());
        System.out.println("toString :"+f.toString());
        File file = new File("demo.txt");
        if (!file.exists()){
            file.createNewFile();//创建到了项目根目录里
        }
//        绝对路径指一个精确,完成的路径
        System.out.println("绝对路径 :"+file.getAbsolutePath());
//        相对路径有一个参会造物,相对这个·参照物的路径
//        相对这个位置,main方法的相对位置为项目根路径
        System.out.println("相对路径 :"+file.getPath());
//        toString的效果永远是相对路径
        System.out.println("toString :"+file.toString());


    }

对目录的操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args) {
        File f = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\src");
        File f1 = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\src");//跨平台建议使用这种
//   常用方法
        System.out.println("文件是否可读 : "+f.canRead());
        System.out.println("文件是否可写 : "+f.canWrite());
        System.out.println("文件的名字 : "+f.getName());
        System.out.println("文件的上级目录 :"+f.getParent());
        System.out.println("是否是一个目录 :"+f.isDirectory());
        System.out.println("是否是一个文件 :"+f.isFile());
        System.out.println("是否隐藏 :"+f.isHidden());
        System.out.println("文件大小 : "+f.length());

        File f2 = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\src\\a\\b\\c");
//        f2.mkdir();创建单层目录
//        f2.mkdirs();创建多层目录
//        f2.delete();删除,只删除一层,如果是删除目录的话只删除没有内容的,如果有内容就不会删除
        String[] list = f.list();//遍历目录下的对应的名字
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("============");
        File[] files = f.listFiles();
        for (File file : files) {//作用相对上面发那个发,多了file对象,作用更加广泛
            System.out.println(file.getName());
        }
        }

file:封装文件/目录各种信息,对文件和目录进行操作,但是我们不可以获取到文件和目录的内容,

于是乎!io!!!流!!!

字符流

IO流体系结构:

I/O:input/output的缩写,用于处理设备之间的数据的传输

形象理解:

案例:通过java程序完成文件的复制

功能分解:使用到第一个流 file reader

功能分解1:初体验io流的文件内容读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) throws IOException {
//        文件--》程序
//        1.有一个文件---》创建file类对象
        File file = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo.txt");
//        2.利用filereader这个流将流连接到源文件--》file流对象
        FileReader fr = new FileReader(file);
//        3.进行操作 --》读取操作
//        下面的代码我们验证了,如果到了文件的结尾,那么读取的内容为-1
/*
        int i = fr.read();
        int i2 = fr.read();
        int i3 = fr.read();
        int i4 = fr.read();
        int i5 = fr.read();
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
        System.out.println(i5);
        */
//方法一
//        int i = fr.read();
//        while (i!=-1){
//            System.out.println(i);
//            i = fr.read();
//        }
//        方法二
        int i =0;
        while ((i = fr.read())!=-1){
            System.out.print((char) i);
        }
//        4.关闭流--》关闭
//        流,数据库,网络资源,考jvm无法帮助我们关闭,必须程序元手动关闭
        fr.close();
    }

新需求,我每次读取5个,不够我在继续读,读到没有为止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public static void main(String[] args) throws IOException {
        //        1.有一个文件---》创建file类对象
        File file = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo.txt");
//        2.利用filereader这个流将流连接到源文件--》file流对象
        FileReader fr = new FileReader(file);
//        3.进行操作 --》读取操作
        char [] ch = new char[5];
        int len = fr.read(ch);//一次读取五个,返回值是数组中的有效长度
        while (len!=-1){
/*            方法1
        for (int i = 0; i < len; i++) {
                System.out.println(ch[i]);
            }
            System.out.println("!");
            len = fr.read(ch);*/

            String str  = new String(ch,0,len);
            System.out.println(str);
            len = fr.read(ch);
        }
//        4.关闭操作
        fr.close();
    }

利用缓冲数组,做一个操作

功能分解2:程序输出文件,filewriter

一个一个向外输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public static void main(String[] args) throws IOException {
//目标文件
       File file = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo01.txt");
//      fw连接到文件
        FileWriter fw = new FileWriter(file);
//开始操作
        String str = "你好,小朋友";
        for (int i = 0; i < str.length(); i++) {
            fw.write(str.charAt(i));
        }
//        关闭流
        fw.close();
    }

发现:如果目标文件不存在,会自动创建文件写入,如果存在,

new FileWriter(file);,相当于对源文件覆盖,而并不是追加

new FileWriter(file,true);为true的时候才会有追加操作

new FileWriter(file,false);为false的时候会是覆盖操作,默认也是覆盖

批量,使用缓冲数组向外输出,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package TestIO.com.hyc.IO01;

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

public class Test03 {
    public static void main(String[] args) throws IOException {
//目标文件
       File file = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo01.txt");
//      fw连接到文件
        FileWriter fw = new FileWriter(file,true);//追加

//开始操作
        String str = "老子开心";
        char[] ch =str.toCharArray();
        fw.write(ch);

//        关闭流
        fw.close();
    }
}

接下来是合并操作!

使用reader和writer完成文件复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package TestIO.com.hyc.IO01;


import java.io.*;

public class Test04 {
    public static void main(String[] args) throws IOException {
//        创建file类
//        一个复制本体,一个是接受复制
        File file = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo01.txt");
        File file2 = new File("D:\\java工程师\\javaSE代码\\javaSE源码\\javaSE\\demo02.txt");
//        创建输出流
        FileReader reader = new FileReader(file);
//        FileReader reader1 = new FileReader(file2);
        FileWriter writer = new FileWriter(file2,true);//用追加的形式不用覆盖的形式

        //region 1.一个一个字符的形式
        int n = reader.read();
        while (n!=-1){
                writer.write(n);
                n = reader.read();
        }
        //endregion
        //region 2.缓冲数组的形式
        char[] ch = new char[5];
        int len = reader.read(ch);
        while (len!=-1){
            writer.write(ch,0,len);//输出缓冲数组有效的长度
            len = reader.read(ch);
        }

        //region 3.缓冲数组转成字符串的形式
        char[] ch1 = new char[5];
        int len1 = reader.read(ch1);
        while (len1!=-1){
            String s =new String(ch1,0,len1);
            writer.write(s);//输出缓冲数组有效的长度
            len1 = reader.read(ch1);
            System.out.println(len1);
        }
        //endregion
//关闭流,后用先关
        writer.close();
        reader.close();

    }
}

注意:不要用字符流去操作文本格式以外的文件!!!!!!!!!!!

好好学习,每天都在进步!!!!!!

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3btqwmdvn4cgo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大数据必学Java基础(六十九):IO流的深入了解
封装文件/目录的各种信息,对目录/文件进行操作,但是我们不可以获取到文件/目录中的内容。
Lansonli
2022/10/05
2320
大数据必学Java基础(六十九):IO流的深入了解
Java—I/O流
当不同的介质之间有数据交互的时候,JAVA就使用流来实现。 数据源可以是文件,还可以是数据库,网络甚至是其他的程序
SakuraTears
2022/01/13
4120
第二十一天 IO-递归&字节流&字符流【悟空教程】
递归就是“在一个方法内可以再次调用自身”,如下,method方法又调用了method方法。
Java帮帮
2018/07/26
7630
第二十一天 IO-递归&字节流&字符流【悟空教程】
Java_IO流(精讲)包含练习题及答案
包含常用的所有属性与函数的示例,并且对【字符流】【字节流】分别做的【读写】操作示例。
红目香薰
2022/11/29
5740
Java_IO流(精讲)包含练习题及答案
IO
IO File类 作用 访问和操作文件的类 创建方式 File file = new File( String pathname ); 常用方法 boolean exists( )//判断文件是否存在 boolean isFile( )//判断是否是文件 boolean isDirectory( )//判断是否为文件目录 String getPath( )//获取相对路径 String getAbsolutePath( )//获取绝对路径 String getName( )//获取文件或者目录的名称 boo
xiaozhangStu
2023/05/04
3180
重新java系列之IO流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
大忽悠爱学习
2022/05/06
7870
重新java系列之IO流
第54节:Java当中的IO流(中)
如果目录里面有文件,或者还有目录,就无法删除,会显示为false的,那么就要从里头往外进行删除,可以进行递归的方法.
达达前端
2019/07/03
6030
第54节:Java当中的IO流(中)
java基础io流——字符流的变革(深入浅出)
在io流里,先诞生了字节流,但是字节流读取数据会有乱码的问题(读中文会乱码)。比如:
100000860378
2018/09/13
5120
java基础io流——字符流的变革(深入浅出)
Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
说故事的五公子
2020/01/02
1.4K0
-1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
public void write(byte[] b,int off,int len)
noteless
2018/09/11
7080
-1-4 java io   java流 常用流 分类  File类 文件 字节流  字符流  缓冲流  内存操作流 合并序列流
Java基础(二十二):File类与IO流
java.io.Reader抽象类是表示用于读取字符流的所有类的父类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法
冬天vs不冷
2025/01/21
1220
Java基础(二十二):File类与IO流
Java基础-21(01)总结字符流,IO流编码问题,实用案例必做一遍
1:字符流(掌握) // 字节流读取中文可能出现的小问题(所以用字符流输入输出中文) package cn.itcast_01; import java.io.FileInputStream; import java.io.IOException; /* * 字节流读取中文可能出现的小问题: */ public class FileInputStreamDemo { public static void main(String[] args) throws IOException { // 创建字
Java帮帮
2018/03/16
1.2K0
JAVA学习第四十七课 — IO流(一):文件的读写
如:InputStream的派生类FileInputStream,Reader的派生类FileReader
全栈程序员站长
2022/07/10
2940
文件类以及IO输入输出
需求:给定一个路径,请通过递归完成遍历该目录下所有内容,并把文件的绝对路径输出在控制台
秋落雨微凉
2022/10/25
6620
关于什么是IO流
需要转换—转换流InputStreamReader、OutputStreamWriter
用户9399690
2022/01/20
8340
关于什么是IO流
JAVA之IO流
IO流 IO流分类 File类 注意,\在文件中是路径的分隔符,但是在java编程中一个\的意思时转义符,在java中\\或者/才是文件的分隔符 文件类里面的基础方法 文件的新建,删除 创建单层目录,多级目录 返回当前文件的子集 流的分类 文件字节输入流FileInputStream ----将文件中的数据读取出来 文件字节输出流FileOutputStream---将数据写入文件中 文件字节输入输出流复制图片案例 文件字节流非常通用,可以用来操作字符的文档,还可以用来操作其他任何文件(图片,压缩包等)
大忽悠爱学习
2021/11/15
4240
JAVA零基础小白免费学习教程day16-字节流&字符流
生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。
用户9184480
2024/12/13
530
I/O
在 Java 程序中所创建的对象都保存在内存中,一旦 JVM 停止运行,这些对象都将会消失。因此以下两种情况必须通过序列化实现:
Qwe7
2022/08/12
6610
Java之IO流
​ ③ File 类中涉及关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并涉及到写入的读取文件内容的操作。如果需要读取或写入的 ”终点“。
OY
2022/03/12
4700
Java之IO流
十五、IO流【黑马JavaSE笔记】(本文文中记录了个人学习感受)
finally:在异常处理时提供finally块来执行所有清除操作。比如说IO流中的释放资源
啵啵鱼
2022/11/23
4860
十五、IO流【黑马JavaSE笔记】(本文文中记录了个人学习感受)
相关推荐
大数据必学Java基础(六十九):IO流的深入了解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档