java 文件读取和写入

这篇具有很好参考价值的文章主要介绍了java 文件读取和写入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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其中的一个属性是文件描述符表.这个表示一个数组,每个元素代表当前进程打开的文件,

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

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

java 文件读取和写入

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方法

java 文件读取和写入

与读文件操作类似注意

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

使用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();
        }
    }
}

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

 文章来源地址https://www.toymoban.com/news/detail-482483.html

到了这里,关于java 文件读取和写入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java获取文件名后缀方法

      Java是一种应用广泛的编程语言,可以通过多种方式来实现对文件的操作。如文件名后缀、文件扩展名等。今天我们来看下 Java是如何获取文件名后缀的吧! 1.打开一个空文件,将其复制到一个新的文件夹中。 2.新建一个类,在里面定义方法,名称为 dirs. csvf 3.在 dirs. csvf类中

    2024年02月15日
    浏览(51)
  • Java文件下载中文文件名乱码的解决方案

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月13日
    浏览(59)
  • java用正则方法验证文件名是否合法

    Java中用到文件操作时,经常要验证文件名是否合法. 用File类的createNewFile()方法的确很管用.但当要批量验证时,效率上就会有问题.正则匹配的开销比创建文件少了很多. 那么一个合法的文件(Win下)应该符合如下规则:  1.文件名不能为空,空在这里有两个意思:  文件名(包括扩展名

    2024年02月10日
    浏览(36)
  • Java下载excel文件名中文乱码解决

    我是一名充满激情的程序员,💻希望和大家一起学习进步!我热爱编程,对技术充满好奇心和求知欲! 🗣️无论你是新手还是老手,都能从我的博客中获得有价值的内容! 🚀让我们一起努力,成为更优秀的程序员吧!💪💻 当使用Java下载Excel文件时,有时会遇到文件名中

    2024年02月07日
    浏览(59)
  • Java/Spring/Postman下载文件名称乱码处理

    由于C端的解析方式不一,有时下载文件时会产生乱码 配置为 attachment;filename=%20.xlsx 形式 部分浏览器可正常解析,部分不行(如Postman) 处理: 配置为 attachment;filename=%20.xlsx;filename*=utf-8\\\'\\\'%20.xlsx 形式

    2024年02月11日
    浏览(54)
  • java透传参数至logback,自定义日志文件名。过期日志文件自动删除

    filter日志拦截,把不需要打印的日志信息拦截在外,只录入有key参数的(filterReply = FilterReply.ACCEPT;)。 filter class配置为filter的包路径.类名。如果不需要拦截日志的话,可以不用配置filter,java中也不用写。因为我的参数透传使用在了日志文件命名当中,没有key的数据会替换为

    2024年02月09日
    浏览(44)
  • java实现浏览器下载附件时文件名中文乱码解决方案

    方案一:URLEncoder 解决 IE 和 谷歌浏览器的附件中文名问题。 如果客户端浏览器是 IE 浏览器 或者 是谷歌浏览器。我们需要使用 URLEncoder 类先对中文名进行 UTF-8 的编码 操作。 因为 IE 浏览器和谷歌浏览器收到含有编码后的字符串后会以 UTF-8 字符集进行解码显示。 方案二:B

    2024年03月09日
    浏览(69)
  • java minio通过getPresignedObjectUrl设置(自定义)预签名URL下载文件的响应文件名之minio源码改造方案

    用户上传文件到Minio时,一般存储在Minio中的对象名称都是后端以UUID或者其他随机或非随机方案生成的唯一标识做为文件名,这个对象名称一般都不会是用户上传时的原文件名称。 在用户下载时,想让文件流不通过后端服务器,而是用户直接申请并使用某个要下载对象的Min

    2024年01月25日
    浏览(64)
  • 批量修改文件名-txt_word_ppt批量修改文件名

    word/excel/ppt等等批量修改文件名 批量修改文件名的方法有N多种,我的这种是比较简单的,小白也可以使用 使用windows自带的批处理脚本进行批量重命名 什么类型的文件批量修改原理都一样,这里以txt修改为例 通过py脚本快速创建文件测试,这步是创建100个txt文件,这步不重要,因为我

    2024年01月16日
    浏览(95)