Java文件流操作

一、文件创建和删除

   public static void main(String[] args) throws IOException {
   
        File file = new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txt
        System.out.println(file.getPath());//返回当前相对路径
        System.out.println(file.getCanonicalFile());//返回绝对路径
        System.out.println(file.exists());//false
        //创建文件
        boolean re=file.createNewFile();
        System.out.println(re);
        System.out.println(file.exists());//true
       //删除文件
        System.out.println(file.exists());//true
        boolean se=file.delete();
        System.out.println(file.exists());//false
    }

二、文件读写分类(重点讨论)

文件大多数是二进制保存的,当然也有以保存字符的文本文件,当我们读写文件的时候,我们需要针对这两种文件类型有不同操作,针对二进制的文件我们叫字节流,也就是每次读写一个字节,针对文本文件我们读写操作叫字符流,每次读取多个字节,这里多个字节没有准确几个字节,GBK每个中文字符有两个字节,UTF8每个中文字符是三个字节

 三、测试环境

 描述:Test目录下创建了两个目录,aaa和bbb,这个两个目录下分别创建文件111和222

四、字符流操作

 1、读操作

··方法一 

public class Test_Read {
    public static void main(String[] args) throws IOException {
        Reader reader=new FileReader("e:/Test/aaa/111.txt");
        while (true){
            int x=reader.read();
            if(x==-1){
                //读取完毕
                break;
            }
            char y=(char)x;//一个中文字符一个中文字符读取
            System.out.print(y+" ");
        }
    }
}

描述:用read方法一个中文字符一个中文字符读取但是read方法返回的是一个整数,如果是-1说明为文件空读取结束,不为空传为字符输出。 

 ··方法二

public class Test_Read_Array {
    public static void main(String[] args) throws IOException {
        Reader reader=new FileReader("e:/Test/aaa/111.txt");
        while (true){
            char[] array=new char[2];
            int n=reader.read(array);//每次只读取两个中文字符,并且打印,多次读取
            if(n==-1){
                //读取完毕
                break;
            }
            System.out.println("n="+n);
            for (int i=0;i<n;i++) {
                System.out.print(array[i]);
            }
            System.out.println();
        }
    }
}

 文件资源泄露问题(重点)

你有没有发现上述代码存在致命问题!!!,在while循环里面我们频繁的下创建reader对象,这会填满文件资源表,文件资源表一旦填满那么我们在想操作该文件将会失败,所以我们应该及时关闭我们创建的对象,以读取对象为例修改:

public class Test_Read_Array {
    public static void main(String[] args) throws IOException {
        //try()中的资源会随着try结束而释放
       try ( Reader reader=new FileReader("e:/Test/aaa/111.txt");){
           while (true){
               char[] array=new char[2];
               int n=reader.read(array);//每次只读取两个中文字符,并且打印,多次读取
               if(n==-1){
                   //读取完毕
                   break;
               }
               System.out.println("n="+n);
               for (int i=0;i<n;i++) {
                   System.out.print(array[i]);
               }
               System.out.println();
           }
       }
    }
}

这只是一种简单写法,当然你可以在try后面用finally配合read.close(),同样可以 ,我们下面的代码将会采用这种简便的写法

2、写操作

public class Test_Write {
    public static void main(String[] args) {
        //文件路径后面不加true默认是false会覆盖原来文件内容,加了true是在原来文件内容后添加新内容
        try(Writer writer=new FileWriter("e:/Test/aaa/111.txt",true)){
            //写入数据
            writer.write("我看到了");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

五、字节流操作 

1、读操作

public class Test_Read {
    //字节流读操作
    public static void main(String[] args) throws IOException {
        try(InputStream inputStream=new FileInputStream("E:/Test/bbb/222.txt")){
            //开始读取文件
            Scanner scanner=new Scanner(inputStream);
            String s=scanner.next();
            System.out.println(s);
        }
    }
}

2、写操作 

public class Test_Write {
    public static void main(String[] args) throws FileNotFoundException {
        try(OutputStream outputStream=new FileOutputStream("E:/Test/bbb/222.txt")){
            PrintWriter writer=new  PrintWriter(outputStream);
            writer.printf("我知道了");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

 

啊?非但没有写入而且原来的数据害消失了!!! 

这是因为缓冲区问题,所谓缓冲区问题就是,我们这个写的操作实际上是先写入缓存区,缓存区的数据到达一定数量后在写进硬盘,所以我们现在要直接把缓冲区的内容写进硬盘就可以了

public class Test_Write {
    public static void main(String[] args) throws FileNotFoundException {
        try(OutputStream outputStream=new FileOutputStream("E:/Test/bbb/222.txt")){
            PrintWriter writer=new  PrintWriter(outputStream);
            writer.printf("我知道了",true);
            writer.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商技术揭秘十二:电商平台的搜索引擎优化与营销小结

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

图像分割 - 利用K-means聚类方法实现图像分割

1、前言 传统的数字图像处理算法中,针对于图像分割部分,除了阈值处理、区域生长啊等等之类的,还有很经典的聚类算法 图像分割是指将图像划分为多个片段。这是因为对于不同的图像任务,我们往往不care整个图片,只对感兴趣的区域处理,这就是图像分割的意义。 聚类算法的思…

2024.4.6-day11-CSS 背景和精灵图

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业2024.4.6学习笔记1 背景2 背景图片3 CSS 精灵图 作业 <!DOCTYPE html&…

消息中间件之消息通信模型MQ

一&#xff0c;为什么需要MQ&#xff1f; 应用中&#xff0c;经常需要对庞大的海量数据进行监控&#xff0c;随着网络技术和软件开发技术的不断提高&#xff0c;在实战开发中MQ的使用与日俱增&#xff0c;特别是RabbitMQ在分布式系统中存储转发消息&#xff0c;可以保证数据不…

ezuikit.js播放链接三种方式

第一种&#xff1a;iframe嵌入的方式 适用于ezopen开头的链接格式 举例&#xff1a;ezopen://open.ys7.com/BB98332770/1.hd.live <iframeid"ysOpenDevice"src{https://open.ys7.com/ezopen/h5/iframe? url${item.url}&autoplay1&accessToken${item…

全网最详细的网络安全自学笔记

1.选择方向 首先是选择方向的问题&#xff0c;网络安全是一个很宽泛的专业&#xff0c;包含的方向特别多。比如 web安全&#xff0c;系统安全&#xff0c;无线安全&#xff0c;二进制安全&#xff0c;运维安全&#xff0c;渗透测试&#xff0c;软件安全&#xff0c;IOT安全&am…

揭秘月赚600万的团购新模式:零风险购物竟能带来丰厚收益?

你是否曾经被看似赔钱的买卖吸引&#xff0c;最后却发现其背后的巨大盈利潜力&#xff1f;这种震撼的体验&#xff0c;让我深感好奇与惊喜。今天&#xff0c;我将与你分享一个不同寻常的商业模式&#xff0c;它或许能启发你走上属于自己的盈利之路。 这家小程序商城以其独特的团…

编译原理实验3(基于算符优先文法分析的语法分析器 )

实验目的 加深对语法分析器工作过程的理解&#xff1b;加强对算符优先分析实现语法分析程序的掌握&#xff1b;能够产用一种编程语言实现简单的语法分析程序&#xff1b;能够使用自己编写的分析程序对简单的程序段进行语法分析。 实验要求 根据简单表达式文法构造算符优先分…

实景三维在文化旅游领域的应用

实景三维技术&#xff0c;作为一种前沿的科技手段&#xff0c;近年来在文化旅游领域的应用逐渐崭露头角。它能够将真实世界的场景以三维的形式精确呈现&#xff0c;为游客带来身临其境的体验&#xff0c;为文化旅游注入新的活力。本文将探讨实景三维在文化旅游领域的应用及其所…

算法汇总啊

一些常用算法汇总 算法思想-----数据结构动态规划(DP)0.题目特点1.【重点】经典例题(简单一维dp&#xff09;1.斐波那契数列2.矩形覆盖3.跳台阶4.变态跳台阶 2.我的日常练习汇总(DP)1.蓝桥真题-----路径 算法思想-----数据结构 数据结构的存储方式 : 顺序存储(数组) , 链式存储…

【一步一步学】新手如何学习RouterOS

最近有很多同学私下问&#xff1a;ROS太难学&#xff0c;很难入门。 我在这里统一回答大家这个问题&#xff0c;其实入门还是比较简单&#xff0c;今天我写一个大概的学习过程 &#xff0c;后续是需要你们自己针对性学习与深入研究。 1. 了解RouterOS基础 学习任何东西&#x…

K8S之Job和CronJob控制器

这里写目录标题 Job概念适用场景使用案例 CronJob概念适用场景使用案例 Job 概念 Job控制器用于管理Pod对象运行一次性任务&#xff0c;例如&#xff1a;对数据库备份&#xff0c;可以直接在k8s上启动一个mysqldump备份程序&#xff0c;也可以启动一个pod&#xff0c;这个pod…

PostgreSQL入门到实战-第二弹

PostgreSQL入门到实战 PostgreSQL安装之Windows官网地址PostgreSQL概述Windows上安装PostgreSQL更新计划 PostgreSQL安装之Windows 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.postgresql.org/PostgreSQL概…

【Attention(0)】卷首语,从“SEAttention注意力效果秒杀CBAM”聊到“Transformer”

Attention 注意力是一个非常有价值的机制&#xff0c;例如我们耳熟能详的 SE attention。我们常常看到这样的标题《YOLOv8&#xff0c;注意力&#xff0c; SEAttention注意力&#xff0c;效果秒杀CBAM》。 其实&#xff0c;CBAM 是一种“卷积神经网络注意力模块”(Convolution…

The Sandbox:在NFT Paris 2024引领数字文艺复兴

我们的欧洲、中东和非洲&#xff08;EMEA&#xff09;总部位于法国巴黎&#xff0c;我们的创始人也是土生土长的法国人&#xff0c;因此 The Sandbox 一直与 "光之城 "有着紧密的联系。近年来&#xff0c;巴黎日益成为 Web3 创新的中心&#xff0c;NFT 艺术氛围日益浓…

动态规划刷题(算法竞赛、蓝桥杯)--线段(线性DP)

1、题目链接&#xff1a;P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc.h> using namespace std; const int N20010; int a[N][2],f[N][2]; //a[i][0]表示l[i],a[i][1]表示r[i] int dis(int a,int b){return abs(a-b); } int…

企业级开源路由系统VyOS-构建和使用

介绍 VyOS是一个基于Linux的企业级路由器操作系统&#xff0c;被许多公司和个人用来驱动物理网络设备&#xff0c;如路由器和防火墙。它有一个统一的命令行界面来管理其所有的网络相关功能&#xff08;和Juniper Junos操作很像&#xff09;。VyOS使用Debian GNU/Linux作为其基…

【JAVASE】带你了解instanceof和equals的魅力

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.instanceof instanceof 是 Java 的保留关键字。它的作用是测试…

自动化高并发批量抓取京东平台商品数据(内附接入key密钥API响应示例)

通过API接口&#xff08;接入key&#xff0c;密钥&#xff09;&#xff0c;可以获取商品的标题、价格、图片、描述等详细信息。 参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写)cache:[yes,no]默认yes&#x…

Java Netty个人对个人私聊demo

一、demo要求 1&#xff09;编写一个Netty个人对个人聊天系统&#xff0c;实现服务器端和客户端之间的数据简单通讯&#xff08;非阻塞&#xff09; 2&#xff09;实现单人对单人聊 3&#xff09;服务器端&#xff1a;可以监测用户上线&#xff0c;离线&#xff0c;并实现消…