【文件操作和IO】

文件操作和IO

  • 1.文件
  • 2. 硬盘上文件的目录结构
  • 3. 文件路径
  • 4. 文件重要分类:
  • 5. Java中操作文件
    • 5.1 Java对于文件操作的API
    • 5.2 Java中使用File类来进行文件操作
    • 5.3 File类属性
    • 5.4 构造方法
    • 5.5 方法:
  • 6. 文件内容的读写 -- 文件流(数据流)
    • 6.1 InputStream
    • 6.2 使用InputStream读文件
    • 6.3 使用OutputStream写文件
  • 7. Reader和Writer字符流
    • 7.1 Reader读文件
    • 7.2 Writer写文件
  • 8. 使用Scanner接收intputStream

1.文件

文件指的是 存储在硬盘上的文件。文件除了有数据内容之外,还有一部分信息,例如文件名、文件类型、文件大小等并不作为文件的数据而存在,这部分信息可以视为文件的元信息。

2. 硬盘上文件的目录结构

硬盘上文件的目录结构为树形结构

3. 文件路径

  1. 绝对路径:指的就是从树根节点出发(Windows是盘符)一层一层最终到达目标文件
  2. 相对路径:先指定一个 当前目录、工作目录、基准目录,从当前目录出发,找到目标文件。

4. 文件重要分类:

  • 文本文件 :是按照 文本/字符串 方式来理解文本内容(文件里面的二进制内容,都是表示的字符串),进一步可以认为二进制文件的内容都是合法的字符(如普通英文字母、使用ascii汉字、使用gbk/utf8)。
  • 二进制文件:这里的内容任何数据都可以(图片、音频、可执行程序、动态库都属于二进制文件.class也是二进制)。
  • 用记事本的方式来判定是文本文件还是二进制文件;使用记事本打开一个文件,如果看到的是正常内容,不是乱码,说明这是文本文件,乱码则是二进制文件

5. Java中操作文件

5.1 Java对于文件操作的API

  1. 针对文件系统的操作,创建文件、删除文件、重命名文件、列出目录内容等
  2. 针对文件内容的操作:读文件和写文件

5.2 Java中使用File类来进行文件操作

File类所在包 为java.io。这里的io即输入input和输入output,数据从硬盘到cpu为输入,反之则输出。

5.3 File类属性

  • static String(修饰符及类型) – pathSeparator :依赖于系统的路径分隔符,String类型的表示;
  • static char – pathSeparator :依赖于系统的路径分隔符,char类型

5.4 构造方法

  • File(File parent, String child):根据父目录 + 孩子文件路径,创建一个新的 File 实例
  • File(String pathname) :根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者
    相对路径
  • File(String parent, String child) :根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示

5.5 方法:

  • 获取路径、文件名、绝对路径
    如下代码:
// File 常见的方法
import java.io.File;
import java.io.IOException;public class IODemo1 {public static void main(String[] args) throws IOException {//File f = new File("E:/user/1/test.txt");File f = new File("./test.txt");// 返回 File 对象的父目录文件路径System.out.println(f.getParent());// 返回 FIle 对象的纯文件名称System.out.println(f.getName());//返回 File 对象的文件路径System.out.println(f.getPath());// 返回 File 对象的绝对路径System.out.println(f.getAbsolutePath());//返回 File 对象的修饰过的绝对路径System.out.println(f.getCanonicalPath());}
}
  • 创建文件、查看文件是否存在、是否是文件、是否是目录
import java.io.File;
import java.io.IOException;public class IODemo2 {public static void main(String[] args) throws IOException {File f = new File("./test.txt");System.out.println(f.exists());System.out.println(f.isFile());System.out.println(f.isDirectory());// 创建文件,创建完之后不会重复创建,boolean ret = f.createNewFile();System.out.println("ret = "+ret);}
}
  • 删除文件
import java.io.File;public class IODemo3 {public static void main(String[] args) throws InterruptedException {File file = new File("./test.txt");// 删除文件//boolean ret = file.delete();//System.out.println(ret);// 根据File对象,标注文件将被删除,删除动作会到JVM运行结束时才会进行file.deleteOnExit();Thread.sleep(5000);}
}
  • 获取目录下所有文件名
import java.io.File;
import java.util.Arrays;public class IODemo4 {public static void main(String[] args) {File file = new File(".");// 返回File对象代表的目录下的所有文件名//String[] files = file.list();// 返回File对象代表的目录下的所有文件,以File对象表示File[] files = file.listFiles();//System.out.println(files);  // 打印的是哈希值,不是地址System.out.println(Arrays.toString(files));}
}
  • 创建目录(多层目录)
import java.io.File;public class IODemo5 {public static void main(String[] args) {File file = new File("./aaa/bbb/ccc");// 创建单个目录//boolean ret = file.mkdir();boolean ret = file.mkdirs();System.out.println(ret);}
}
  • 重命名
import java.io.File;public class IODemo6 {public static void main(String[] args) {File src = new File("./test2.txt");File dest = new File("./aaa/test2.txt");// 重命名 还可以移动文件System.out.println(src.renameTo(dest));}
}

6. 文件内容的读写 – 文件流(数据流)

  • 字节流:每次读写的最小单位就是一个字符。 InputStream和OutputStream
  • 字符流:每次读写的最小单位是一个字符(一个字符可能由多个字节构成)。字符流可以内部处理字符编码。Reader 和 Writer。

6.1 InputStream

由于inputStream 是抽象类,不能实例化。所以new的是一个 FileInputStream。
在这里插入图片描述
在这里插入图片描述

inputStream 是抽象类,不能实例化。有些类我们不希望它能够创建出实例的,使用abstract来描述,编译器就可以进行更严格的检查(如单例模式,数据库约束)所谓 面向对象 就是通过代码抽象的表示实际事物的一种方式

  • read()方法:返回类型为int,读取一个字节的数据,返回-1代表读完了。

  • read(byte[] b) :最多读取 b.length 字节的数据到 b 中,返回实际读到的数量;-1 代表已经读完了

  • read(byte[] b,int off, int len):最多读取 len - off 字节的数据到 b 中,放在从 off 开始,返回实际读到的数量;-1 代表以及读完了
    read的参数版本,传入的字节数参数,是一个输出型参数,byte[]是引用类型,方法内部针对数组内容进行修改,方法执行结束之后,方法外部也能生效

  • close() :返回类型为void,关闭字节流。

使用try() 代码块会自动调用inputStream的close方法

public class IODemo7 {public static void main(String[] args) throws IOException { // FileNotFoundException也是一种特殊的IOException/*InputStream inputStream = null;try {// 打开文件inputStream = new FileInputStream("./test.txt");// 中间还有很多逻辑,所有得使用try finally,最后执行inputStream.close()以免没执行} finally {// 关闭文件inputStream.close();}*/// 使用try模块 ,此时try自动调用inputStream得close,但前提得FileInputStream实现了Closeable接口得类,才能放到try()里面try (InputStream inputStream = new FileInputStream("./test.txt")) {// 读取文件,也不知道文件有多少个字节,使用while来完成while (true) {/*int b = inputStream.read();if (b == -1) {// 读到文件末尾为-1,文件读取完毕break;}//打印这个字节的数据 文件内容是abcde 以16进制打印它的ASCII码// 如果内容是中文,此时打印出的就是每个字节,就是对应到utf8编码的值System.out.printf("%x ", b);*///byte[] buffer = new byte[1024];int n = inputStream.read(buffer);if (n == -1) {break;}for (int i = 0; i < n; i++) {System.out.printf("%x ",buffer[i]);}}}}
}

6.2 使用InputStream读文件

读文件:就是把硬盘数据读取到内存中。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;public class IODemo8 {public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("./test.txt")) {while (true) {byte[] buffer = new byte[1024];int n = inputStream.read(buffer);if (n == -1) {break;}String s = new String(buffer,0,n);System.out.println(s);}} catch (IOException e) {throw new RuntimeException(e);}}
}

6.3 使用OutputStream写文件

在FileOutputStream()添加true参数,是在源文件里的内容进行追加

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class IODemo9 {public static void main(String[] args) {// append参数是追加try (OutputStream outputStream = new FileOutputStream("./test.txt",true)) {//此处写入的是二进制,byte[] buffer = new byte[] {97,98,99,100,101};outputStream.write(buffer);} catch (IOException e) {throw new RuntimeException(e);}}
}

7. Reader和Writer字符流

使用方式和InputStream、OutputStream差不多。

7.1 Reader读文件

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class IODemo10 {public static void main(String[] args) {// 使用字符流读取文件内容try (Reader reader = new FileReader("./test.txt")) {// 读取文件while (true) {char[] buffer = new char[1024];int n = reader.read(buffer);if (n == -1) {break;}String s = new String(buffer,0,n);System.out.println(s);/*for (int i = 0;i < n;i++) {System.out.print(buffer[i]);System.out.println(" ");}*/}} catch (IOException e) {throw new RuntimeException(e);}}
}

7.2 Writer写文件

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class IODemo11 {public static void main(String[] args) {try (Writer writer = new FileWriter("./test.txt",true)) {String str = "你好帅哥";writer.write(str);} catch (IOException e) {throw new RuntimeException(e);}}
}

8. 使用Scanner接收intputStream

Scanner(System.in)本质就是一个inputStream

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;public class IODemo12 {public static void main(String[] args) {try (InputStream inputStream = new FileInputStream("./test.txt")) {Scanner scanner = new Scanner(inputStream);while (scanner.hasNext()) {String s = scanner.next();System.out.println(s);}} catch (IOException e) {throw new RuntimeException(e);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759221.shtml

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

相关文章

Apache Superset

前言 最近在准备一个小的项目&#xff0c;需要对 Hive 的数据进行展示&#xff0c;所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。 Superset 1.1 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接…

kubesphere all in one部署Jenkins提示1 Insufficient cpu

原因 devops 至少一个cpu&#xff08;1000m&#xff09;&#xff0c;但是其他资源已经占用了很多cpu CPU 资源以 CPU 单位度量。Kubernetes 中的一个 CPU 等同于&#xff1a; 1 个 AWS vCPU 1 个 GCP核心 1 个 Azure vCore 裸机上具有超线程能力的英特尔处理器上的 1 个超线程…

RISC-V架构的三种特权模式如何切换

1、RISC-V的三种特权模式 特权模式功能描述机器模式&#xff08;M-mode&#xff09;具有最高特权等级&#xff0c;具有访问所有资源的权限&#xff0c;通常运行固件和内核用户模式&#xff08;U-mode&#xff09;权限要比M模式低&#xff0c;通常是用来运行操作系统内核管理员…

MyBatis3源码深度解析(十七)MyBatis缓存(一)一级缓存和二级缓存的实现原理

文章目录 前言第六章 MyBatis缓存6.1 MyBatis缓存实现类6.2 MyBatis一级缓存实现原理6.2.1 一级缓存在查询时的使用6.2.2 一级缓存在更新时的清空 6.3 MyBatis二级缓存的实现原理6.3.1 实现的二级缓存的Executor类型6.3.2 二级缓存在查询时使用6.3.3 二级缓存在更新时清空 前言…

2024年第六届区块链与物联网国际会议(BIOTC 2024)即将召开!

2024年第六届区块链与物联网国际会议&#xff08;简称&#xff1a;BIOTC 2024&#xff09;将于2024 年 7 月 19 日至 21 日在日本福冈召开&#xff0c;旨在为来自行业、学术界和政府的研究人员、从业者和专业人士提供一个论坛&#xff0c;就研发区块链和物联网的专业实践进行交…

简介:使用TensorFlow实现python简版神经网络模型

如果你想进一步深入AI编程的魔法世界&#xff0c;那么TensorFlow和PyTorch这两个深度学习框架将是你的不二之选。它们可以帮助你构建更加复杂的神经网络模型&#xff0c;实现图像识别、语音识别等高级功能。 模型原理&#xff1a;神经网络是一种模拟人脑神经元结构的计算模型&a…

python 基于 websocket 的简单将视频推流到网页

本来有一台设备是要搞成无线的形式的&#xff0c;设备的摄像头的数据可以在一台局域网连接的平板上查看&#xff0c;因为试着使用 RTMP 推流&#xff0c;感觉延时太大了&#xff0c;而 Webrtc 感觉有太麻烦了&#xff0c;所以一开始看到这篇文章使用 UDP 协议进行推流&#xff…

stable diffusion webui ubuntu 安装

1.git clone 下来 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UIStable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.https://github.com/AUTOMATIC1111/stable-diffus…

数据仓库相关概述

数据仓库概述 数据仓库概念 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据&#xff0c;借助数据仓库的分析能力&#xff0c;企业可从数据中获得宝贵的信息进而改进决策。同时&#xff0c;随着时间的推移&#xff0c;数据仓…

期刊如何反击一波可疑图像

出版商正在部署基于人工智能的工具来检测可疑图像&#xff0c;但生成式人工智能威胁着他们的努力。 期刊正在努力检测用于分析蛋白质和DNA的凝胶的操纵图像。图片来源&#xff1a;Shutterstock 似乎每个月都会有一系列针对研究人员的新高调指控&#xff0c;这些研究人员的论文…

Go --- Go语言垃圾处理

概念 垃圾回收&#xff08;GC-Garbage Collection&#xff09;暂停程序业务逻辑SWT&#xff08;stop the world&#xff09;程序根节点&#xff1a;程序中被直接或间接引用的对象集合&#xff0c;能通过他们找出所有可以被访问到的对象&#xff0c;所以Go程序的根节点通常包括…

完全理解ARM启动流程:Uboot-Kernel

内容共计5W字数&#xff0c;但是我还是很多地方说的不够尽兴。那么下次聊&#xff01; 前言 bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 PC机上引导程序一般由BIOS开始执行&#xff0c;然后读取硬盘中位于MBR(Main Bo…

openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整

文章目录 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整247.1 SQL调优关键参数调整 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整 247.1 SQL调优关键参数调整 本节将介绍影响openGauss SQL调优性能的关键数据库主节点配置参数&#xff0c;配…

【JVM】为对象分配内存的方式,死亡对象判断方法

目录 为对象分配内存的方式 指针碰撞 空闲列表 TLAB 死亡对象判断方法 引用计数法 可达性分析算法 为对象分配内存的方式 指针碰撞 一般情况下&#xff0c;JVM的对象都放在堆内存中&#xff08;发生逃逸分析除外&#xff09;。当类加载检查通过后&#xff0c;JVM为新生…

python 中怎样使用任意关键词实参?

在 Python 中&#xff0c;可以使用任意数量的关键字实参和任意关键字实参&#xff0c;也被称为 kwargs。 这允许你在函数调用时传递任意数量的关键字参数。 你可以使用任意数量的关键字实参&#xff08;Keyword Arguments&#xff09;和任意关键字实参&#xff08;Arbitrary Ke…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具&#xff0c;支持Java、Python、PHP、JavaScript、CSS等25种以上的语言&#xff0c;而且能够集成在IDE、Jenkins、Git等服务中&#xff0c;方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准&#xff1a;如命…

走迷宫---dfs在矩阵图里的应用模板

题目描述如下&#xff1a; dfs算法解决迷宫问题的一个标准模板 &#xff0c;通过递归与回溯暴力遍历所有能走的点&#xff0c;并比较找出所有可行方案的最优解 解决这道问题的核心思想和组合数如出一辙&#xff0c;可以说是组合数的升级版 结合注释看dfs更清晰易懂&#xff0…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识&#xff1a; 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架&#xff0c;springcloud继承了spring一直以来的风格——不重复造轮子&#xff0c;里面很多的…

测试平台——前端框架

一、创建vue项目 npm init vitelatest web_class wylWYLdeMacBook-Air testplatform % npm init vitelatest web_class ✔ Select a framework: › Vue ✔ Select a variant: › JavaScriptScaffolding project in /Users/wyl/workspace/testplatform/web_class...Done. Now…

IoT 物联网场景中如何应对安全风险?——青创智通

工业物联网解决方案-工业IOT-青创智通 ​随着物联网&#xff08;IoT&#xff09;技术的快速发展&#xff0c;越来越多的设备、系统和应用被连接到互联网上&#xff0c;从而构建了一个庞大的物联网生态系统。然而&#xff0c;这种连接性也带来了前所未有的安全风险。在物联网场景…