Java文件字符流和字节流中的实战

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

文件内容操作与实战

文件的分类上一篇文章(文件对象处理)已经和大家讲解过了。本章主要文件主要针对于对文件内容的操作展开讲解,文件分为:文本文件二进制文件,不同的文件,操作方法也不尽相同。

针对文本文件,Java提供了一组类——”字符流“,代表类(Reader,Writer)。同样的,Java也为二进制文件提供了一组操作类——”字节流“,代表类(InputStream,OutputStream)。其实这两种的对文件操作原理是相同的,只是针对的文件不同,所以才有了字符流和字节流之分。因为有了字节流与字符流之分,所以相对应的,字节流最低读写字符是”一个字节“,字符流也有对应限制,字符流最低读写”一个字符 “。

这种读写操作一般也统称为IO流。IO操作是在CPU上进行的,以CPU来看待数据的输入和输出。

字符流

输入流:Reader

输出流:Writer

注意:使用完文件资源后应该关闭文件资源

Reader

创建对象及使用:

Java文件字符流和字节流中的实战

Java文件字符流和字节流中的实战

public static void main(String[] args) throws IOException {//创建一个字符流操作对象
    try(Reader reader = new FileReader("d:/hello.txt")){
        while (true) {
            //每次读取一个字符
            int read = reader.read();
            if(read == -1){
                break;
            }
            System.out.print((char)read+" ");
        }
    }
}

Java文件字符流和字节流中的实战

Writer

字符流写入对象的创建及使用:

Java文件字符流和字节流中的实战

Java文件字符流和字节流中的实战

同样的需要使用子类来构造

public static void main(String[] args) throws IOException {
    try(Writer writer = new FileWriter("d:/hello.txt")){
        writer.write("我爱敲代码");
    }
}

Java文件字符流和字节流中的实战

文件使用完,需要进行关闭操作,防止不必要的意外发生。文件的资源泄漏问题不会立即出现,而是一段时间才会出现明显问题。

字节流

输入流:inputStream

输入流:OutputStream

注意:使用完文件资源后应该关闭文件资源

inputStream

构造inputStream对象

Java文件字符流和字节流中的实战

因为这个类是一个抽象方法,在构造时,不能直接使用类名去调用。这里使用子类FileInputStream来构造对象。

public static void main(String[] args) throws IOException {
    //相当于打开一个文件,将这个变量与文件关联
    InputStream inputStream = new FileInputStream("d:/hello.txt");

    inputStream.close();
    //每次使用完文件,必须关闭,防止不必要的资源浪费
}

有时候因为中途return或者结束了进程会不可避免地无法将文件关闭,所以这里使用try/catch/finally语句来进行关闭文件资源操作。

改写代码:

public static void main(String[] args) throws IOException {
    //方案一 
     InputStream inputStream = null;
     try {
         //打开文件
     	inputStream = new FileInputStream("d:/hello.txt");
     }finally {
         //关闭文件
     	inputStream.close();
     }
    
    //方案二,会自动执行close关闭操作
    try(InputStream inputStream = new FileInputStream("d:/hello.txt")){
            
        }
}   

解决了构造函数接下来我们将继续来实现读写操作。

读操作

Java文件字符流和字节流中的实战

可以看见有三个方法可以进行读操作,接下来我们一一测试read()方法的作用。

//read()相当于把字节变成二进制进行表示
public static void main(String[] args) throws IOException {
    try(InputStream inputStream = new FileInputStream("d:/hello.txt")){
        while (true){
            int input = inputStream.read();
            //遇到-1则表示没有数据,退出循环
            if(input == -1){
                break;
            }
            System.out.println(input);
        }
    }
}

Java文件字符流和字节流中的实战

三个方法使用的操作基本一致,都是读到末尾时返回-1,另外两个方法可以指定读取大小。返回的是总字节数,不是二进制数据

OutputStream

构造inputStream对象

Java文件字符流和字节流中的实战

同样的,这个也是一个抽象类,需要调用子类仿佛来创建对象:

Java文件字符流和字节流中的实战

//创建对象及使用方法
//将hello写入文件
public static void main(String[] args) throws IOException {
    try(OutputStream outputStream = new FileOutputStream("d:/hello.txt")){
        byte[] bytes = {'h','e','l','l','o'};
        outputStream.write(bytes);

    }
}

Java文件字符流和字节流中的实战

实战💪

遍历目录,对文件进行查找或者删除

1.将输入目录进行遍历

2.每次找到一个文件就获取目录

3.对比文件名与输入的文件名是否一致

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class FindAndDelete {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查找的目录:");
        File fileDir = new File(scanner.next());
        if(!fileDir.isDirectory()){
            System.out.println("您输入的不是目录!");
            return;
        }
        System.out.println("请输入要查找的文件名");
        String file = scanner.next();
        //递归目录/文件的操作
        scanDir(fileDir,file);
    }

    private static void scanDir(File fileDir, String file) throws IOException {
        File[] files = fileDir.listFiles();
        if(files == null){
            //当前目录为空
            return;
        }
        for(File f:files){
//            System.out.println("当前搜索到"+f.getCanonicalPath());
            if(f.isFile()){
                String filename = f.getName();
                if(filename.equals(file)){
                    System.out.println(f.getCanonicalPath()+"存在该文件");
                }
            }else if(f.isDirectory()){
                scanDir(f,file);
            }else {
                continue;
            }
        }
    }
}

遍历目录,查找文件中的内容与指定内容一致并输出文件目录,类似于文件检索

1.先去简单递归遍历目录

2.每次找到一个文件并获取目录

3.在判定的查询的词中,是否存在上述内容

public class FindTargetDoc {
    public static void main(String[] args) throws IOException {
        //1.先让用户输入需要搜索文件的根目录
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个目录:");
        File fileDir = new File(scanner.next());
        //判断输入的是否为目录
        if(!fileDir.isDirectory()){
            System.out.println("输入错误,你输入的目录不存在");
        }
        //2.获取用户需要查询的词
        System.out.println("请输入要查询的词");
        String word = scanner.next();
        
        //3.递归进行目录/文件的操作
        scanDir(fileDir,word);
        
    }

    private static void scanDir(File fileDir, String word) throws IOException {
        //列出当前FileDir的内容
        File[] files = fileDir.listFiles();
        if(files == null){
            //当前目录是空
            return;
        }
        for (File f:files) {
            if(f.isFile()){
                //判断是否为文件
                String content = readFile(f);
                if(content.contains(word)){
                    System.out.println(f.getCanonicalPath()+"包含查找的文件");
                }
            }else if(f.isDirectory()) {
                //判断是否为目录
                scanDir(f,word);
            }else {
                //不是普通文件也不是目录文件
                continue;
            }
        }
    }

    private static String readFile(File f) throws IOException{
        //读取整个内容,返回
        //处理是字符流,所以使用字符流进行处理
        StringBuilder stringBuilder = new StringBuilder();
        try(Reader reader = new FileReader(f)){
            //将读取的字符拼接到StringBuilder上
            while (true){
                int ch = reader.read();
                if(ch == -1){
                    break;
                }
                stringBuilder.append((char)ch);
            }
        }
        return stringBuilder.toString();
    }
}

进行普通文件的复制操作

1.需要准备两个文件

2.一个有内容,一个无内容

3.一个读一个写,将其读完存储在另一个文档中即可

public class CopyFile {
    public static void main(String[] args) throws IOException {
        //这里可以输入,读者可以自行更改
        File source = new File("d:/aaa/hello.txt");
        File dest = new File("d:/aaa/world.txt");

        if(!source.exists() || !dest.exists()){
            System.out.println("文件不存在");
        }
        Reader reader = new FileReader(source);
        Writer writer = new FileWriter(dest);
        StringBuilder stringBuilder = new StringBuilder();
        while (true){
            int ch = reader.read();
            if(ch == -1){
                break;
            }
            stringBuilder.append((char)ch);
        }
        writer.write(stringBuilder.toString());
        reader.close();//记得关闭资源
        writer.close();
    }
}

以上就是关于我们文件内容的操作及实战,感谢阅读(〃 ̄︶ ̄)人( ̄︶ ̄〃)文章来源地址https://www.toymoban.com/news/detail-421619.html

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

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

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

相关文章

  • 头歌:Java高级特性 - IO流 (答案+详细注释)第1关:什么是IO流+第2关:字节流-输入输出+第3关:字符流 - 输入输出+第4关:复制文件

    目录 第1关:什么是IO流 第2关:字节流-输入输出 第3关:字符流 - 输入输出 第4关:复制文件

    2024年02月10日
    浏览(49)
  • java基础入门-19-【IO(字节流&字符流)】

    生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了 ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做

    2024年02月07日
    浏览(29)
  • Java通过文件流和文件地址下载文件

    如何使用 MultipartFile 进行文件上传、下载到本地,并返回保存路径呢: 用于在 Spring Boot 应用中获取文件流,然后处理上传的文件,将文件保存到指定目录并返回保存的文件路径。下面对代码的各个部分进行简要介绍: 上传目录设置 :在这个示例中, UPLOAD_DIR 常量用于定义上

    2024年02月12日
    浏览(32)
  • Java文件导入接口多参数写法 (POST方法同时支持接收文件流和其他参数)

    使用表单方式进行传输,需要注意其他参数需要使用 @RequestPart 注解进行接收,因为在 post 方法中表单传输使用@RequestParam 接收 json 格式默认视为字符串类型,接口无法映射对应实体类 @RequestParam 依赖Converter or PropertyEditor进行数据解析, @RequestPart参考’Content-Type’ header,依赖

    2024年02月16日
    浏览(30)
  • vue使用文件流和url下载文件

    // 改为使用后台返回 url 下载文件 方法1:这个会导致在点击下载按钮的时候,页面会跳转到奇怪的url。 window.location.href = row.downloadUrl 方法2:点击下载按钮,不会在新窗口打开。 const downloadRes = async () = {         let response = await fetch(row.downloadUrl)         let blob = await respons

    2023年04月15日
    浏览(44)
  • Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

    各位朋友你们好呀。今天是立春,明天就是正月十五元宵节了,这种立春 + 元宵相隔的时候,可是很难遇到的,百年中就只有几次。在这提前祝大家元宵快乐。 今天给大家带来的是 Vue 3 中的极致防抖/节流(含常见方式防抖/节流) 这篇文章,文章中不仅会讲述原来使用的防

    2024年02月01日
    浏览(29)
  • flutter开发实战-防抖Debounce与节流Throttler实现

    flutter开发实战-防抖Debounce与节流Throttler实现 在开发中,经常遇到某些按钮或者界面操作需要做防抖或者节流操作。这里记录一下实现。 防抖Debounce 当有可能在短时间内对一个方法进行多次调用时,需要防抖,并且希望只有最后一次调用真正调用目标方法。因此,基本上每个

    2024年02月07日
    浏览(28)
  • Java中的字符串

    目录 一、简介 二、字符串定义 2.1 直接定义字符串 2.2 通过使用 String 类的构造方法来创建字符串 三、如何使用Java API帮助文档 3.1 帮助文档下载地址 3.2 帮助文档使用 3.2 中文帮助文档 四、 String字符串和int、double、float 的相互转换 4.1 String 转int 4.2 String 转Double、Float 4.3 int转

    2024年02月05日
    浏览(31)
  • Java中的字符串替换

    在Java中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),下面我们就来详细看一下三种的用法!     下面这套 Java300集 视频专门为零基础而制,适合准备入行Java开发的零基础,视频中穿插多个实战项目。每一个知识点都讲解的通俗易懂,由

    2024年02月11日
    浏览(31)
  • 字节流及存放本地文件上传和下载文件

    之前的文章有写过 vue+springboot使用文件流实现文件下载 实现如何通过 的形式进行下载文件 但是它对于很多业务场景相对适用性不是很广泛。 以及 elementUI加springboot实现上传excel文件给后端并读取excel 也只能是通过elementui的元素类型进行上传。 因此,本次文章将通过两种方式

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包