Java文件操作(从创建文件到简单输入输出流)

目录

前言

起步:创建文件

File类

尝试创建一个文件

代码展示

输出结果

基础文件写入与输出:输入输出流

stream流

FileInputStream类

基本读取实现

代码展示

输出结果

FileOutputStream类

基本写入实现

代码展示

输出结果

后言


前言

在上一篇博客(Java实现ATM机模拟系统(week1)-CSDN博客)中,博主有提到要试着做一个简单的ATM机模拟系统,要做出一个合理的可使用的系统,数据的保存是一个需要思考的问题,总不能说将数据保存到内存中,然后一结束运行数据全部丢失吧。对于还未接触过数据库的我来说,能够想到的最好办法就是利用文件操作,把数据写入到文件中,需要时再进行读取。

起步:创建文件

File类

  • File类的对象可以用来表示文件(File)或目录(Directory)。
  • 创建了File类的对象之后,可以调用其方法对文件或目录的属性(如文件名称,日期等)进行修改。
  • file类对象只能修改文件属性,不能直接进行文件读写操作。

尝试创建一个文件

代码展示

import java.io.File;public class Main {public static void main(String[] args) {File file = new File("src\\test.txt") ; //创建File类对象,并给出其相对路径,否则默认创建在当前路径下if(file.exists()){ //调用exists方法,判断文件是否存在System.out.println("文件已存在!"); //如已存在,给出提示}else { //如不存在,执行创建操作try{file.createNewFile();System.out.println("文件创建成功");}catch (Exception e){}}//基本方法演示System.out.println("文件的名字:" + file.getName());System.out.println("文件的路径:" + file.getPath());System.out.println("文件的绝对路径:" + file.getAbsolutePath());System.out.println("是否为目录:" + file.isDirectory());System.out.println("文件大小:" + file.length());}
}

输出结果

文件已存在!//之前已经创建过一回了,不是第一次输出
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:0

基础文件写入与输出:输入输出流

stream流

流指的是一连串流动的数据信号,通过先进先出的方式接收和发送数据

  • 数据流分为输入输出流
  • 输入输出流又分为字节流与字符流(本篇博客先了解对字节流的操作,字符流其实同理)

FileInputStream类

  • 该类继承于InputStream类,用于进行基本的文件读取操作
  • 由于使用的是字节流,无法读取中文字符

基本读取实现

代码展示
import java.io.File;
import java.io.FileInputStream;public class FileInput {public static void fileInput(File file) {try {FileInputStream fileInputStream;fileInputStream = new FileInputStream(file);for (int i = 0; i < file.length(); i++) { //循环读取并打印char s = (char) (fileInputStream.read()) ;System.out.print(s);}System.out.println(); //换行fileInputStream.close(); //关闭文件} catch (Exception e) {System.out.println("文件打开失败");}}}
输出结果

在.txt文件中写入”Hello world!“并在main方法中编写测试,得到以下结果

文件已存在!
Hello world! //文件内容
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:12 //文件大小发生变化

FileOutputStream类

  • 该类继承于OutputStream类,用于进行基本的文件写入操作
  • 由于使用的是字节流,无法读取中文字符

基本写入实现

代码展示

比如我们要在文件中写入"I love study"。首先,我们清空.txt文件中的内容,接着实现下方代码

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.EmptyStackException;public class FileOutput {public static void fileOutput(File file) throws FileNotFoundException { //抛出文件未找到的异常FileOutputStream fileOutputStream = new FileOutputStream(file) ;String string = "I love Study" ;byte[] buff = string.getBytes() ; //字符串转字节数组(因为要写入字节流)try {fileOutputStream.write(buff); //写入字节流} catch (Exception e) {}finally {try {fileOutputStream.close(); //关闭文件} catch (IOException e){e.printStackTrace();}}}
}
输出结果

在main方法中编写测试,输出以下结果

文件已存在!
I love Study //写入的字符串
文件的名字:test.txt
文件的路径:src\test.txt
文件的绝对路径:D:\IDEA\IDEAcode\FileOperationTest\FileOperationTest\src\test.txt
是否为目录:false
文件大小:12

后言

本篇博客就到此结束了,但学无止境,还有许多知识等待我们学习。

  1. 本篇博客初步学习了基本输入输出流的使用,实现了文件的读取和写入,但只接触了对字节流的操作,解决不了中文读写的问题,还需去学习字符流的相关操作。
  2. 同时,文件操作中的一些代码(如异常的抛出,try,catch,finally结构的使用)都需要进行进一步学习。

新手上路,水平有限,如有错误,还望海涵并指出!

与君共勉!

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

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

相关文章

C++ 容器使用指南

C 容器使用指南 一.迭代器 当使用 C 中的容器&#xff08;如 std::vector、std::list、std::map 等&#xff09;时&#xff0c;迭代器是一种非常重要的工具 它们提供了一种通用的方式来访问容器中的元素&#xff0c;允许我们对容器进行遍历、访问、修改和删除操作 1.开始和结束…

给手机换电池、贴膜:VIVO服务还是非常好的

1月的时候去过一次售后&#xff0c;想了解一下手机电池情况&#xff0c;结果说这个型号无法检查。手机已经两年半了&#xff0c;电池容量估计不到80%了。这个手机很满意&#xff08;轻&#xff09;&#xff0c;新出的手机也没有明显优势&#xff0c;于是决心换个电池。一看售后…

每日学习笔记:C++ STL算法分类

非更易型 更易型 移除型 变序型 排序型 已排序区间算法 数值型算法

C++实现函数柯里化

1. 代码 需要c17特性。 #include <tuple>template <typename Function, typename... CapturedArgs> class curried { private:using CapturedArgsTuple std::tuple<std::decay_t<CapturedArgs>...>;template <typename... Args>static auto c…

【滑动窗口】Leetcode 将 x 减到 0 的最小操作数

题目解析 1658. 将 x 减到 0 的最小操作数 算法讲解 这道题按照题目要求的话会变得很难&#xff0c;因为不仅需要考虑数字减到0&#xff0c;还需要考虑最小的操作数。正难则反&#xff0c;按照这个思路&#xff0c;我们来解析题目 这道题本质上无非就是在左边寻找一段区间&a…

HCIP第三次作业(综合)

一、实验要求 二、实验步骤 1、配置IP地址部分 PC1&#xff1a; PC2&#xff1a; PC3&#xff1a; PC4&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; 环回&#xff1a; 2.通过配置缺省路由让公网互通 [R1]ip route-static 0.0.…

Lambda 表达式

Lambda 表达式详细文档 简介 Lambda 表达式是一种匿名函数&#xff0c;允许您在不定义函数的情况下将代码块传递给其他函数或方法。Lambda 表达式通常用于简化代码&#xff0c;并使代码更具可读性。 语法 Lambda 表达式的语法如下&#xff1a; [capture-list] (parameter-…

代码随想录第27天| 39. 组合总和

39. 组合总和 39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩_bilibili 给你一个 无重复元…

思考:开启MMU瞬间可能出现的多种问题以及多种解决方案

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; (说明本文的介绍都是基于armv8-aarch64或armv9硬件架构) 在mmu未开启阶段&#xff0c;PC操作的都是物理地址执行程序&#xff0c;这样看起来一切正常&#xff0c;没啥问题。 例如…

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器 1、接上篇 Windows Server 2022 使用ApacheDS用户认证 使用Administrator用户远程登录192.168.1.100windows server&#xff0c;打开pGina软件 2、输入刚刚在ApacheDS中的新添加的用户测试一下&#xff0c;会自动添加…

嵌入式Linux:fcntl()和ioctl()函数

目录 1、fcntl()函数 2、ioctl()函数 fcntl()和ioctl()是用于对文件描述符进行控制的两个系统调用&#xff0c;它们在不同的情况下有不同的用途和功能。 1、fcntl()函数 fcntl()函数提供了对已打开文件描述符执行各种控制操作的功能&#xff0c;例如复制文件描述符&#xf…

汽车电子行业知识:什么是车联网V2X技术

文章目录 一、V2X是什么?二、V2X功能有哪些?三、V2X的发展现状四、V2X包含哪些技术?五、V2X与哪些领域相关?六、V2X的未来趋势七、有哪些研发V2X技术的公司八、V2X技术应用的困境九、V2X技术应用的需求 自动驾驶、汽车互联等新一代信息技术和汽车产业融合发展已经成为…

如何在极狐GitLab 配置 邮件功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了在极狐GitLab 用户…

【带你了解下前端开发语言有那些】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

爱上数据结构:二叉树的基本概念

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;数据结构 ​ 一、树的基本概念 1.概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…

Prometheus+grafana环境搭建rabbitmq(docker+二进制两种方式安装)(二)

搭建完Prometheusgrafana基础环境后参见&#xff1a;Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客&#xff0c;对我本地的一些常用法人服务进行一个监控。基本都可以根据官方文档完成搭建&#xff0c;因为docker和二进制方式安装各有优缺点。 d…

隐私计算实训营学习七:隐语SCQL的架构详细拆解

文章目录 一、SCQL Overview1.1 SCQL背景1.2 SCQL Overview 二、SCQL CCL三、SCQL架构 一、SCQL Overview 1.1 SCQL背景 SCQL&#xff1a;属于隐私计算BI范畴&#xff0c;允许多个互不信任参与方在不泄露各自隐私数据的条件下进行联合数据分析。 如下数据在不同机构&#xf…

Unity 学习日记 12.小球撞击冰块游戏

目录 1.准备场景 2.让小球动起来 3.用鼠标把小球甩出去 4.加入鼠标点击小球的判断 5.小球与冰块的碰撞测试 6.撞击后销毁冰块 ​编辑 7.显示游戏计时 8.显示扔球次数 9.显示剩余冰块个数 10.游戏结束 11.完整代码 下载源码 UnityPackage 最终效果&#xff1a; 1.准…

基于springboot+vue实现的房源出租信息系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…