java 文件读取和写入

2023-10-30

1.文件名

1.InputStream(字节流)  和Reader(字符流)

2.OutputStream(字节流) 和 Writer(字符流)

1.文件名

Java提供了File类 来表示一个文件(通过构造方法来指定路径)

绝对路径

目录与目录之间用 \ 表示,,也可以用 / ,形如D:xxxxxx的就是绝对路径

相对路径

..(当前路径的上一级路径) 和 . (当前路径) 表示的就是相对路径,需要注意的是相对路径要有参考(自身)

1.InputStream(字节流)  和Reader(字符流)

InputStream 是一个抽象类 ,因此要通过new子类FileInputStream来实例化,传递文件路径就是打开某个文件

如果打开成功,那么针对new出来的对象的操作就是针对文件的操作 (这个对象被称为句柄(Handler))

文件打开后一定要记得关闭!!!!

InputStream inputStream = new FileInputStream("./test2.txt");
inputStream.close();

为什么要关闭文件?

为了释放资源(文件描述符表)

一个进程会使用PCB来描述,PCB其中的一个属性是文件描述符表.这个表示一个数组,每个元素代表当前进程打开的文件,

每次打开文件都会占据一个数组的一个位置,(这个数组是存在上限的),如果一直不释放,就会导致进程后续打开文件失败

读文件(字节流) ->如果读取的是文本文件在不进行别的操作下是打印一堆数字,而不是文本

1.无参数版本,返回一个int(但其实是byte),如果读到文件末尾返回-1,正常是0-255

也就是说虽然返回的int类型,但是值是从0到255之间,而不是其他数值

2.一个参数版本,把文件读到的内容塞到数组里,返回值是int(读取成功的字节个数) 

3.三个参数版本,把读到的数据往数组里塞,从off开始塞,塞len个

读取文件操作实例:

InputStream inputStream = new FileInputStream("./test2.txt");
byte[] b arr = new byte[1024];//1024个字节,也就是一次读取1KB
int len = inputStream.read(arr);
String str = new String(arr,0,len);//把读取到的二进制数据转换成成字符串
System.out.println(str);

inputStream.close();//关闭文件

上述方法还是存在隐患的,如果在多线程应用中,在read方法调用时出现问题抛异常,那么下面的close操作可能会执行不了,也就是这个线程永远占有这个文件资源

因此我们可以这么写:

//try catch完后会自动对这个文件关闭
 
try(InputStream inputStream = new FileInputStream(scoFile)){

    }catch(IOException e){
            e.printStackTrace();
        }

Reader 的读取方式,与上面的区别是读取到的是字符,比如文件中存在"你好"这两个字符,Reader的方式可以直接读取然后打印,但是上述方法直接读取打印是一个个数字,这些就是二进制数据,因此需要经过特殊处理,比如把他们连成一个字符串然后打印

import java.io.*;

public class File3 {
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("test2.txt");
        char[] buffer = new char[1024];
        int len = reader.read(buffer);
        for (int i = 0; i < len; i++) {
            System.out.println(buffer[i]);
        }
        reader.close();
    }
}

2.OutputStream(字节流) 和 Writer(字符流)

本质都是通过new出对象然后调用写的方法

OutputStream new出的子类的write方法

与读文件操作类似注意

注意:每次写都会清空文件内容

使用Writer的write方法

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

public class File3 {
    public static void main(String[] args) {
        try(Writer writer = new FileWriter("test1.txt")){
            writer.write("hello world");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

上面两个写的方法类似,都是写入流,区别只是写入的方式,一个以字符写入,一个以字节写入,最后流的本质还是你要写入到的数据

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 文件读取和写入 的相关文章

  • 使用 java 删除 XML 根的子级

    这是我的 xml 文件
  • Selenium:将 Internet Explorer 中的文件下载到指定文件夹,无需直接链接,无需 Windows 窗体,无需 AutoIt 或 Robot

    我经常遇到一个问题 如何在 IE 中下载文件 与 Firefox 的 Chrome 不同 您不能只指定所需的文件夹 所有文件都会下载到该文件夹 您还需要与本机 Windows 表单等进行交互 有多种选项 例如使用 AutoIt 使用键盘命令
  • 将处理项目移至 Eclipse

    我已经在处理项目上工作了一段时间 现在想将其移至 Eclipse 中 我已经在 Eclipse 环境中安装了 Proclipse 我有很多扩展名为 pde 的文件 然而 Proclipse 文件都以 java 结尾 所有 pde 文件都存在
  • Java,顺序流在哪个线程中执行?

    在阅读有关流的文档时 我遇到了以下句子 attempting to access mutable state from behavioral parameters presents you with a bad choice if you
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • java 中的梵文 i18n

    我正在尝试使用来自互联网的示例 ttf 文件在 java 中使用 i18n 进行梵文 印地文 我可以加载资源包条目 还可以加载 ttf 并设置字体 但它不会根据需要呈现 jlabel 它显示块代替字符 如果我在 Eclipse 中调试 我可
  • 使用 kryo 注册课程的策略

    我最近发现了 kryonet 库 它非常棒并且非常适合我的需求 然而 我遇到的一个问题是制定一种好的策略来注册所有可以转移的类 我知道我可以在每个对象中编写一个静态方法 该方法将返回它使用的所有类的列表 但我真的不想这样做 为了我自己的时间
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • ActiveMQ JNDI 查找问题

    尝试使用 JNDI 运行以下 ActiveMQ http activemq apache org jndi support html http ActiveMQ 20JNDI 并且我的 jboss server node lib 文件夹中有
  • Java HashSet 是线程安全的只读吗?

    如果我通过 Collections unmodifyingSet 运行 HashSet 实例后 它是线程安全的吗 我问这个是因为 Set 文档声明它不是 但我只是执行读取操作 来自 Javadoc 请注意 此实现不是同步的 如果多个线程同时
  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • 使用 Java 8 Spring 4 + MyBatis 集成问题

    使用 Java 8 1 8 0 60 Spring 4 2 1 和 MyBatis 3 3 0 时遇到以下异常 Sep 29 2015 11 02 58 AM org springframework context annotation A
  • 为什么不能在 if 语句中声明变量?

    以下 Java 代码无法编译 int a 0 if a 1 int b 0 if a 1 b 1 为什么 不能有任何代码路径导致程序将 1 分配给b无需先声明 我突然想到b的变量范围可能仅限于第一个if声明 但后来我不明白为什么 如果我实在
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • com.sun.xml.ws.message.saaj.SAAJHeader 无法转换为 com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader

    我正在尝试访问第三方 Web 服务 该服务要求我创建一个传递时间信息 用户名和密码的安全标头 我在网上搜索了可行的示例 并尝试了多种方法 我正在尝试使用 Java 6 中内置的内容来做到这一点 我不确定我做错了什么 从 WSDL 生成 We

随机推荐

  • STM32F103ZET6【HAL函开发】STM32CUBEMX------2.GPIO输入、按键外部中断

    一 硬件介绍 正点原子战舰开发板 主控芯片STM32F103ZET6 两个LED接到PB5 PE5 三个按键PE2 PE3 PE4接GND 一个按键PA0接VCC3 3 二 STM32CUBEMX基础配置 2 1 晶振配置 如果你的板子上外
  • DC-DC模块输入端电容对12V电源纹波的影响

    1 目标 说明DC DC模块输入端极性电容对供电源纹波的影响 强调DC DC输入端极性滤波电容的重要性 2 DC DC模块介绍 DC DC模块的输入电源大小为12V 核心芯片为MP24943 输出电源大小为5V 电路原理图如下 输入端不添加
  • Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)

    1 常见的java运行时异常有哪些 了解非运行时异常看这里 什么是java中的异常 常见的运行时异常看这里 常见的运行时异常有哪些 我们所说的常见异常是jdk或者其他常用第三方jar中的异常 出现频次很高的异常 常见的非运行时异常 即检查异
  • 2019 校招多益网络软件开发java 笔试题

    刚做完 真的又凉了 编程题没写出来 心累了 而且问答题好多其实都是之前看过的 可是只有模糊的印象 则真的好气呀 也算给自己敲了警钟吧 要用心记 用心总结 多益的笔试题型挺多的 难度算还好的 毕竟只有一道编程题 奈何我没写出来 题型 选择题
  • 15b万用表怎么测电容_万用表怎么用?福禄克15B+一机详解万用表的使用方法

    随着大众消费等级和安全意识的不断提升 在不断加购电器的同时 人们愈发重视电路安全 万用表渐渐从电工行业专用仪器成为了家庭标配工具之一 然而 很多人把万用表买回家之后 却对着表盘上密密麻麻的符号一筹莫展 最后只能放在角落里落满灰尘 那么 万用
  • Mysql索引

    创建索引 索引能提高查询速率 1 最常见的是主键 默认加了索引 2 普通创建索引方法 create index 名字 on 表名 列名 3 联合索引 create index 索引名 on 表名 列名 列名 列名 4 复合索引查询的时候遵守
  • 二分的经典问题 最大化最小值和最小化最大值

    有点长 可以选自己想看的部分看 不过建议把刚开始的介绍看完 不多说 先来一个在升序无重复元素的数组中二分搜索的板子 l r 2 mid可能会爆int这种细节问题我们就放一边 int a MAX int Binary Search int v
  • 文件上传——七牛云

    目录 七牛云简介 七牛云使用前 使用七牛云SDK开发 开发步骤 开发接口测试 源码下载 七牛云简介 七牛云是国内领先的企业级公有云服务商 致力于打造以数据为核心的场景化PaaS服务 围绕富媒体场景 七牛先后推出了对象存储 融合CDN加速 数
  • 【电气专业知识问答】问:电动机轴承温度异常升高如何处理?

    电气专业知识问答 问 电动机轴承温度异常升高如何处理 答 1 起因 电动机轴承温度异常升高的可能原因 油环卡住 轴瓦上油槽被杂物堵塞或者被磨平 轴承冷却水 如有 发生故障 润滑不良 缺油 加油过多 油不清洁 油中有水分 等 电动机的端盖装配
  • 【第02例】IPD进阶

    目录 简介 专栏目录 内容详解 作者简介 CSDN学院相关内容 简介 今天继续来讲讲 IPD 中涉及的几个评审点 PDCP 是英文 Plan Decision Check Point 的英文首字母的简称 也就是计划决策评审点 具体讲解 PD
  • Server MyEclipse Tomcat v8.5 was unable to start within 45 seconds.

    MyEclipse启动Tomcat v8 5遇到问题 解决方法之一 直接在MyEclipse上修改 1 在下图中定位到Servers下 双击 MyEclipse Tomcat v8 5 2 在下图中点红框部分 3 在下图中 默认Start的
  • 参数显著性检验的p值小于显著性水平不等于其具有经济学意义

    在做简单线性回归或者多元线性回归时 如何评估参数的统计意义和经济意义是我们研究问题的两个重要方面 理论意义和经济意义是如何显示在数字上的呢 以下是笔者在做相关或者线性回归课题时学习整理出来的 在此分享记录 参数的t统计量足够大 或者p值足够
  • python 接口自动化测试-----常见面试题汇总

    1 软件接口是什么 程序不同模块之间传输数据并作处理的类或函数 2 HTTP 和 HTTPS 协议区别 答 https 协议需要到 CA Certificate Authority 证书颁发机构 申请证书 一般免费证书 较少 因而需要一定费
  • 【Anaconda】基本操作

    1 创建 使用命令查看当前拥有的虚拟环境 conda info envs 在指定目录下创建新的虚拟环境 其中C ProgramData Anaconda3 envs 是创建的目录所在位置 pytorch 是新环境名称 python 3 8是
  • SpringBoot之【mybatisplus】分页插件、条件查询、sql打印开启

    文章目录 一 概述 二 流程 1 sql打印开启 2 分页插件 3 常用条件 一 概述 本篇主要写开启 sql的打印 分页插件开启 条件查询 二 流程 1 sql打印开启 yml文件添加如下配置 mybatis plus 配置slq打印日志
  • ForeFront Chat 免费版GPT-4来了!

    Forefront Chat简介 近日 Forefront AI 正式推出 Forefront Chat 允许用户免费体验GPT 4 的强大功能 Forefront AI 在 Twitter 上表示 今天 我们发布了 Forefront C
  • 为什么析构函数必须是虚函数?为什么默认的析构函数不是虚函数?

    本博客可能随时删除或隐藏 请关注微信公众号 获取永久内容 微信搜索 编程笔记本 获取更多信息 codingbook2020 今天我们来谈一谈面试 C 工程师时经常被谈到的一个问题 为什么析构函数必须是虚函数 为什么默认的析构函数不是虚函数
  • java高频面试题(2023最新)

    目录 一 java基础 1 八大基础类型 2 java三大特性 3 重载和重写的区别 4 pubilc protected dafault 不写 private修饰符的作用范围 5 和equals的区别 6 hashcode 值相同 equ
  • 如何解决“Error: xxx.js 已被代码依赖分析忽略,无法被其他模块引用”报错?

    今天在用uniapp框架写小程序 遇到报错 错误原因 微信开发者工具从 1 05 2201210 版本开始 对小程序项目新增了无依赖文件过滤能力 如果某个 js 文件被静态分析显示是无依赖文件 在实际运行时又被其他 js 文件 requir
  • java 文件读取和写入

    1 文件名 1 InputStream 字节流 和Reader 字符流 2 OutputStream 字节流 和 Writer 字符流 1 文件名 Java提供了File类 来表示一个文件 通过构造方法来指定路径 绝对路径 目录与目录之间用