【详解】文件操作,Stream流

news2024/11/24 21:02:09

文件(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.coloradmin.cn/o/2118069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是点对点专线、SDH专线以及MSTP专线?

点对点专线&#xff08;Point-to-Point Circuit&#xff09;、SDH专线&#xff08;Synchronous Digital Hierarchy&#xff09;以及MSTP专线&#xff08;Multi-Service Transport Platform&#xff09;都是企业级通信服务中常见的网络连接类型&#xff0c;主要用于提供高带宽、…

SprinBoot+Vue停车场管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

《语文新读写》是知网收录吗?语文新读写编辑部查询

《语文新读写》是知网收录吗&#xff1f;语文新读写编辑部查询 《语文新读写》是知网收录。 一、期刊简介 《语文新读写》是经国家新闻出版总署正式批准&#xff0c;由上海世纪出版&#xff08;集团&#xff09;有限公司主管&#xff0c;上海少年儿童出版社有限公司主办的综合…

超宽带uwb芯片模块测距,扫地机器人轨迹跟随,自动导航定位、测距避障

智能家居产品正以未有的速度改变着我们的生活。从智能音箱到智能门锁&#xff0c;再到今天我们要深入探讨的主角——搭载了超宽带&#xff08;Ultra-Wideband, UWB&#xff09;芯片模块的扫地机器人&#xff0c;它们正悄然开启一场家庭清洁的创新。想象一下&#xff0c;一个不仅…

Python | 练习作业 2

为学生登录系统新增搜索功能。 第二天作业的解题思路&#xff1a; # 1.创建一个空列表保存搜索结果 # 2.让用户输入要搜索的内容 # 3.遍历学生信息&#xff0c;检查学生的id name age gender score # 中的属性值 是否跟用户搜索的内容一致 # 4.如果有一致的属性 那么就将该学生…

全局共用一个线程池竟然发生死锁了

在我们进行代码开发时&#xff0c;我也见过很多全局注册一个自定义线程池&#xff08;也有可能不是自定义的&#xff0c;直接使用更不推荐Executors 创建的线程池&#xff09;&#xff0c;也许是业务量不高、也许是其他原因&#xff0c;反正全局可这一个线程池使劲造。 先给大家…

深入FastAPI:掌握使用多个关联模型的高级用法[Union类型]

在FastAPI中&#xff0c;响应模型可以声明为Union类型&#xff0c;这允许你为同一个端点定义多种可能的响应模型。这种灵活性使得API可以根据不同的情况返回不同类型的数据结构。 例如&#xff0c;根据请求中的查询参数或数据库中的数据&#xff0c;一个API端点可能有时返回一…

零信任安全:重新思考数字世界的访问

目录 ​编辑 网络安全形势的演变 数字安全的变化 引入零信任安全 零信任的当今意义 了解零信任原则 零信任架构的核心概念 实施微分段 持续验证&#xff1a;积极主动的立场 与传统安全模型的对比 在现代企业中实施零信任 零信任实施基础知识 多重身份验证 (MFA) 的…

【数据结构】——二叉树(JAVA)

一、二叉树的定义二、二叉树的形态三、二叉树的性质四、二叉树的存储五、二叉树的创建与遍历&#xff08;递归&#xff09; 一、二叉树的定义 二叉树(Binary Tree) 是由n个结点构成的有限集(n≥0)&#xff0c;n0时为空树&#xff0c;n>0时为非空树。对于非空树root&#xf…

如何在Linux 上运行 SciChart WPF图表控件?

SciChart – 一个跨平台图表库&#xff0c;可实现 Windows Presentation Foundation (WPF)、JavaScript 以及原生 iOS (Swift/Objective-C) 和 Android (Java/Kotlin)&#xff0c;基于代号为 Visual Xccelerator 的专有 C 渲染引擎。这提供了 SciChart 众所周知的速度和性能&am…

网络编程项目(速递项目)

目录 一、功能要求 服务器 用户客户端 快递员客户端 二、演示效果 1.注册&#xff0c;登录&#xff0c;注销功能演示 ​编辑 2.用户功能演示 ​编辑 3.快递员功能演示 三、项目代码 1.头文件&#xff1a; 2.服务器&#xff1a; 3.用户端&#xff1a; 4..快递员端&…

Vue2 day-04

目录 一. vue组件 1.1 为什么用组件 1.2 vue组件 1.3 基础使用 1.4 全局 - 注册使用 1.5 局部 - 注册使用 1.4 用less写的样式 二. Vue组件之间传值(重点) 2.1 父组件向子组件传值 2.2 子组件向父组件传值 2.3 兄弟之间的传递 三. vue生命周期 3.1 含义 3.2 钩子…

SprinBoot+Vue智慧农业专家远程指导系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

Transformer、RNN和SSM的相似性探究:揭示看似不相关的LLM架构之间的联系

通过探索看似不相关的大语言模型(LLM)架构之间的潜在联系,我们可能为促进不同模型间的思想交流和提高整体效率开辟新的途径。 尽管Mamba等线性循环神经网络(RNN)和状态空间模型(SSM)近来备受关注,Transformer架构仍然是LLM的主要支柱。这种格局可能即将发生变化:像Jamba、Samb…

红队C2工具Sliver探究与免杀

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

【QCA(定性比较分析)组态研究】01 基础入门

【目录】 1.理论入门1.1和个案分析的区别1.2 QCA的特点因果非对称:殊途同归:1.3 什么时候用到QCA2.QCA的一般步骤3.QCA论文精读1.理论入门 QCA(定性比较分析)是一种探索性研究方法,旨在通过系统地比较不同案例的条件组合,识别出影响结果的因果关系。它结合了定性和定量分…

HarmonyOS Next系列之实现一个左右露出中间大两边小带缩放动画的轮播图(十二)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

ASP.NET Core 中间件

一、什么是中间件&#xff1f; 中间件 是一种装配到 ASP.NET Core 应用程序请求处理管道中的软件组件&#xff0c;用于处理 HTTP 请求和响应。 每个中间件组件可以&#xff1a; 选择是否将请求传递到下一个中间件&#xff1a;通过调用 next() 或者不调用 next() 来决定是否将…

HTML5中的数据存储sessionStorage、localStorage

第8章 HTML5中的数据存储 之前通常使用Cookie存储机制将数据保存在用户的客户端。 H5增加了两种全新的数据存储方式&#xff1a;Web Stroage和Web SQL Database. 前者用于临时或永久保存客户端少量数据&#xff0c;后者是客户端本地化的一套数据库系统。 8.1 Web Storage存…

日本“大米荒”持续!政府再次拒绝投放储备米

KlipC报道&#xff1a;日本多地从7月开始出现“大米荒”&#xff0c;有部分新米上市&#xff0c;但是许多超市的大米仍然存在断购或限购的情况&#xff0c;并且部分新米价格上涨至去年同期的两倍。大阪府官员再次呼吁日本中央政府尽快投放储备米以缓解供应紧张&#xff0c;但遭…