当前位置: 首页 > article >正文

【详解】文件操作,Stream流

文件(File)操作——I/O流

Windows(大多数)进行文件操作的类File。

文件?文件夹?路径?

文件

能够使用工具打开操作的,文件是不能存储文件的。

一般文件具有后缀——.mp4

image-20240724102511445

文件夹

存储文件的

在这里插入图片描述

路径问题——“/”

正右\ 反左/ ——统一朝左(linux)

在这里插入图片描述

相对路径

在命令行中输入。

. 当前

… 上一级

操作系统有关

Linux : CentOs—> RedHat

在这里插入图片描述

开发者模式(安卓),linux的内核程序(基础)。

Hello文件

在这里插入图片描述

路径

Windows: win11/win10: D:\H_J_2312暑期\20240710\video\abc.mp4

文件对象

File f= new File(PATH);

api操作

createNewFile()

创建新文件

delete()

删除当前文件

package com.ffyc.file;

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

public class FileDemo {
    public static void main(String[] args) throws Exception {
        final String PATH = "D:/test/";
        File f=  null;

        for (int i = 0; i < 10; i++) {
            String fileName = PATH+"apple"+i+".txt";
            f = new File(fileName);//文件对象
            f.createNewFile();//会自动识别,文件名相同则不会创建

        }
        /**
         * 删除文件
         */
        f = new File("D:/test/apple5.txt");
        f.delete();

        /**
         * 改文件属性高的时间
         */
        f = new File("D:/test/apple6.txt");
        f.setLastModified(new  Date().getTime());
        f.setWritable(false);//只读;  true可写

        //f.mkdir();//创建文件夹



    }
}

image-20240724115622384

多文件操作

list()–>String[]

列出所有对象名称

image-20240724140613134

listFiles()–>File[]

列出文件(夹)对象

package com.ffyc.file;

import java.io.File;

public class FilesDemo01 {
    public static void main(String[] args) {
        final String PATH = "D:/test";
        File files = new File(PATH);

        String[] list = files.list();//1名称

        /**
         * 扫描文件夹下所有的文件夹,文件名称
         */
        for (int i = 0; i < list.length; i++) {
            System.out.println(list[i]);
        }

        File[] files1 = files.listFiles();//2对象

        for (File f : files1){
            if (f.isDirectory()){
                //System.out.println("文件夹对象-->" + f);
                System.out.println("文件夹名称:" + f.getName());
            }else {
                System.out.println("文件-->"+f);
            }
        }

    }
}

FileChooser

在这里插入图片描述

package com.ffyc.file;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.File;

public class JFileChooserDemo02 {
    public static void main(String[] args) {
        JFileChooser chooser = new JFileChooser();//创建文件选择器对象
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        /**
         * 过滤选择的文件类型(后缀)
         */
//        FileNameExtensionFilter filter = new FileNameExtensionFilter(
//                "JPG & GIF Images", "jpg", "gif");
//        chooser.setFileFilter(filter);

        //显示界面,点击 打开 or 取消
        int returnVal = chooser.showOpenDialog(null);
        if(returnVal == JFileChooser.APPROVE_OPTION) {//选项按钮
//            System.out.println("你选择打开的文件: "
//                    +
//                    chooser.getSelectedFile()   );
            //chooser.getSelectedFile().getName());
            File selectedFile = chooser.getSelectedFile();
            for (File file :  selectedFile.listFiles()){//列出所有文件对象
                System.out.println(file.getName());
            }
        }
    }

}

查询指定文件夹下的所有文件

image-20240724144408917

package com.ffyc.file;

import javax.swing.*;
import java.io.File;

/**
 * 查询指定文件夹下的所有文件
 * 使用递归
 */

public class FinAllFilesDemo03 {
    static int count = 0;

    public static void f(File file){
        if (file.isFile()){//终止条件
//            System.out.println(file.getName());
            if (file.getName().endsWith("jpg")){//找后缀是.jpg的图片打印
                System.out.println(file.getName());
                count++;
            }
            return;
        }
        //一般规律
        File[] files = file.listFiles();

        if (files != null) {
            for (File x : files){
                f(x);
            }
        }
    }

    public static void main(String[] args) {
//       final String PATH = "D:/test/";
//       File f = new File(PATH);
//       f(f);
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnVal = chooser.showOpenDialog(null);  //显示界面,点击“打开”,"取消"
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File selectedFile = chooser.getSelectedFile();
            f(selectedFile);

        }
        System.out.println("图片数量:"+count);


    }
}
package com.ffyc.file;

import javax.swing.*;
import java.io.File;

/**
 * 查询指定文件夹下的所有文件
 * 使用递归
 */

public class FinAllFilesDemo03 {
    static int count = 0;

    public static void f(File file){
        if (file.isFile()){//终止条件
//            System.out.println(file.getName());
            if (file.getName().endsWith("jpg")){//找后缀是.jpg的图片打印
                System.out.println(file.getName());
                count++;
            }
            return;
        }
        //一般规律
        File[] files = file.listFiles();

        if (files != null) {
            for (File x : files){
                f(x);
            }
        }
    }

    public static void main(String[] args) {
//       final String PATH = "D:/test/";
//       File f = new File(PATH);
//       f(f);
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnVal = chooser.showOpenDialog(null);  //显示界面,点击“打开”,"取消"
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File selectedFile = chooser.getSelectedFile();
            f(selectedFile);

        }
        System.out.println("图片数量:"+count);


    }
}

流(Stream)–>抽象概念–对硬盘操作

出内存叫写,入内存叫读。

hard disk 硬盘

keyboread键盘

在这里插入图片描述
在这里插入图片描述

破坏硬盘的操作:拆开破坏真空环境,消磁。

Out出内存–写入

字节流–不能出现中文,因为会出现乱码。

8位

在这里插入图片描述

在这里插入图片描述

image-20240724155518747

package com.ffyc.stream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class OutputStreamDemo01 {
    public static void main(String[] args) throws Exception {
        final String PATH = "D:/test/out.txt";
        File file = new File(PATH);
        OutputStream outputStream = new FileOutputStream(file);//创建新对象

        outputStream.write('a');
        outputStream.write('p');
        outputStream.write('p');

        outputStream.flush();//冲马桶
        outputStream.close();//打开后关闭这条通道
        
    }
}

In——读入数据

在这里插入图片描述

image-20240724161033896

-1 ——>EOF

在这里插入图片描述
在这里插入图片描述

package com.ffyc.stream;

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

public class InputStreamDemo02 {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = new FileInputStream("D:/test/out.txt");

        while (true) {
            int read = inputStream.read();
            if (read == -1) break;//返回-1代表到达文件末尾
            System.out.print((char) read);
        }
        inputStream.close();;

    }
}

app+le(,append: true)

在这里插入图片描述
在这里插入图片描述

false——覆盖掉之前结果<一般情况下>

文件拷贝

image-20240724165524292

在这里插入图片描述

小结:流

  1. 回顾IO
  2. 字符输出流
  3. 包装类型
  4. 对象流

字节流

硬盘缓存

在这里插入图片描述

在这里插入图片描述

  • "字节流"写入writ——在没写flush()的情况下成功了。
package com.ffyc.review;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputStreamDemo01 {
    public static void main(String[] args) throws Exception {
        OutputStream outputStream
                = new FileOutputStream("D:/test/o2out.txt");
        /**
         * "字节流"写入write
         * 在没写flush()的情况下成功了。
         */
        outputStream.write('A');
        outputStream.write('B');
        outputStream.write('C');

        Thread.sleep(1000*60);//同时再创建一个相同文件传,后面运行的文件会把之前写的内容覆盖


    }
}

抽象类

在这里插入图片描述
在这里插入图片描述

字符流——字节流的包装类

能够以字符方式输出,相当于两个字节流合起来,需要flush()。

在这里插入图片描述

package com.ffyc.review;

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

public class WriterDemo03 {
    public static void main(String[] args) throws Exception {
        File file = new File("D:\\test\\dog.txt");
        Writer out = new FileWriter(file);
        out.write("hello");
        out.flush();
        //out.close();
        out.write("哈比");
        out.flush();
        out.write("轰隆隆~");
        out.flush();


    }
}

输出结果:
在这里插入图片描述

Print Writer() ——>分行文字

在这里插入图片描述

目标:
在这里插入图片描述
在这里插入图片描述

—>包装处理 外加图片

package com.ffyc.review;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class WriterDemo04 {
    public static void main(String[] args) throws Exception {
        File file =  new File("D:\\test\\诗歌.html");
        PrintWriter printWriter = new PrintWriter(file);


        printWriter.println("<h1>李白——将进酒</h1>");
        printWriter.println("<style>img{width:150px;height:150px}</style>");
        printWriter.println("<img src = 'https://ts1.cn.mm.bing.net/th?id=OIP-C.zWnfMFdbxf9PsQKiZHXvHgHaHa&w=200&h=200&c=9&rs=1&qlt=99&o=6&dpr=1.3&pid=13.1'>");
        printWriter.println(("<p>君不见黄河之水天上来,</p>"));
        printWriter.println("<p>奔流到海不复回。</p>");

        printWriter.flush();
        printWriter.close();


    }
}

结果:

在这里插入图片描述

放视频

package com.ffyc.review;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class WriterDemo04 {
    public static void main(String[] args) throws Exception {
        File file =  new File("D:\\test\\诗歌.html");
        PrintWriter printWriter = new PrintWriter(file);


        printWriter.println("<h1>李白——将进酒</h1>");
        printWriter.println("<style>img{width:150px;height:150px}</style>");
        printWriter.println("<img src = 'https://ts1.cn.mm.bing.net/th?id=OIP-C.zWnfMFdbxf9PsQKiZHXvHgHaHa&w=200&h=200&c=9&rs=1&qlt=99&o=6&dpr=1.3&pid=13.1'>");
        printWriter.println("<video src = 'C:\\Users\\dell\\Desktop\\34.mp4' width='320' height='240' controls></vedio>");
        printWriter.println(("<p>君不见黄河之水天上来,</p>"));
        printWriter.println("<p>奔流到海不复回。</p>");

        printWriter.flush();
        printWriter.close();


    }
}

在这里插入图片描述

字符输入流:Reader()

一般读都没有flush()

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

转化为指定编码

在这里插入图片描述

根据后缀习惯看出

在这里插入图片描述

io应用——数据解析

ReadHtml
正好博主给大家推荐一个很好的编程学习软件:
在这里插入图片描述

package com.ffyc.stream;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;

public class ReadHtml {
    public static void main(String[] args) throws Exception {
        String path = "https://m.w3cschool.cn/html/html-intro.html";
        URL url = new URL(path);
        //字节转成字符流
        InputStream inputStream = url.openStream();

        Reader reader = new InputStreamReader(inputStream);

        BufferedReader in = new BufferedReader(reader);

        String line = null;

        while ((line = in.readLine()) != null){
            System.out.println(line);
        }
        in.close();

    }
}


http://www.kler.cn/a/296819.html

相关文章:

  • 【零基础必看的数据库教程】——SQL WHERE 子句
  • “从失业到月入过万:一位上班族的AI绘画赚钱之路”
  • 【Vue】关于Vue3的生命周期
  • openEuler 搭建 vsftpd 服务器(FTP Over SSL、虚拟用户)
  • 探索数据变换:Transform在数据分析中的重要性
  • 每日一题——第八十三题
  • 单源最短路径 洛谷【P4779】
  • 使用 uni-app 开发微信小程序:深入教程与技巧
  • 原生 iOS 引入 Flutter 报错 kernel_blob.bin 找不到
  • 【操作与配置】基于Tex Live的VS Code编写LaTex
  • 2025届计算机毕设选题推荐-基于python的校园车辆管理系统【python-爬虫-大数据定制】
  • 【网页播放器】播放自己喜欢的音乐
  • 基于SpringBoot的智能制造云平台系统的设计与实现计算机毕设
  • 美食|基于SpringBoot+vue的美食网站(源码+数据库+文档)
  • 内核启动时减少log的方式
  • 亚信安慧AntDB-T数据库内核之MVCC机制
  • 探究零工市场小程序如何改变传统兼职模式
  • 【机器学习】朴素贝叶斯
  • 【Power Compiler手册】9.时钟门控(5保留时钟门控信息)
  • 【深入解析】AI工作流中的HTTP组件:客户端与服务端执行的区别