File操作-InputStream/OutputStream及是否创建文件

简介: File操作-InputStream/OutputStream及是否创建文件

处理的都是字节流,写入的时候也为字节流,不能直接写入中文字符

1.实现文件复制

示例代码如下:

public void copyFile(String src, String dest) {
        // 1.提供读入、写出的文件
        File file1 = new File(src);
        File file2 = new File(dest);
        // 2.提供相应的流
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(file1);
            fos = new FileOutputStream(file2);
            // 3.实现文件的复制
            byte[] b = new byte[1024];
            int len;
            while ((len = fis.read(b)) != -1) {
                // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
                fos.write(b, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

2.FileOutputStream写入文件


写入的时候一定要转换为字节,getBytes();如果目标文件不存在,则FileOutputStream会创建目标文件(前提是父路径文件对象必须存在)。

如果文件存在,会将原有的文件覆盖。若加上参数true,则为append。

@Test
    public void testFileOutputStream() {
        // 1.创建一个File对象,表明要写入的文件位置。
        File file = new File("test7.txt");
        // 2.创建一个FileOutputStream的对象,将file的对象作为形参传递给FileOutputStream的构造器中
        FileOutputStream fos = null;
        try {
            // 输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖
            //若加上参数true,则为append;不加,则为覆盖
            //fos = new FileOutputStream(file,true);
            fos = new FileOutputStream(file);
            // 3.写入的操作--将String转换为字节数组
            fos.write(new String("I love China,你呢!").getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 4.关闭输出流
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }



3.FileInputStream读出文件

只能处理字节流,英文字符,不能处理中文字符

    @Test
    public void testFileInputStream3() { // abcdefgcde
        FileInputStream fis = null;
        try {
            File file = new File("test7.txt");
            fis = new FileInputStream(file);
            byte[] b = new byte[5];// 读取到的数据要写入的数组。
            int len;// 每次读入到byte中的字节的长度,若无则返回-1
            while ((len = fis.read(b)) != -1) {
                // for (int i = 0; i < len; i++) {
                // System.out.print((char) b[i]);
                // }
                String str = new String(b, 0, len);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
/*可以处理中文字符和英文字符*/
    @Test
    public void testFileInputStream4() { // abcdefgcde
        FileInputStream fis = null;
        try {
            File file = new File("hello.txt");
            fis = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(fis);
            char[] b = new char[5];// 读取到的数据要写入的数组。
            int len;// 每次读入到char[]中的长度,若无则返回-1
            while ((len = isr.read(b)) != -1) {
                 System.out.println(len);
                 for (int i = 0; i < len; i++) {
                 System.out.print((char) b[i]);
                 }
                String str = new String(b, 0, len);
                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

【Tips】:

在Java中,new File("name")不会创建新文件,在new File()之后需要调用createNewFile()才能创建新文件;

new FileOutputStream("name")会产生一个新文件;
new FileInputStream("name")不会创建新文件,若文件不存在会报错;
file=new File("name")+new FileInputStream(file)
不会创建新文件,若文件不存在也会报错;
file=new File("name")+new FileOutputStream(file),会创建新文件。


目录
相关文章
|
4月前
|
人工智能 安全 Java
Spring Boot 中使用 Function 和异步线程池处理列表拆分任务并汇总结果
在Java开发中,处理大规模数据时常常需要将列表拆分为多个子列表进行异步处理并汇总结果。本文介绍如何在Spring Boot中使用Function和异步线程池实现高效且可维护的代码,涵盖结果封装、线程池配置、列表拆分处理及结果汇总等关键步骤。
154 0
网站备案工信部短信核验操作流程
阿里云网站备案工信部短信核验操作流程,网站备案通过阿里云初审后后提交到管局,需要进行工信部短信核验
1426 0
网站备案工信部短信核验操作流程
|
11月前
|
运维 Kubernetes Serverless
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
本文基于2024云栖大会田双坤的演讲,介绍了Kubernetes作为云原生操作系统的角色及其在各类任务中的应用,重点探讨了Argo Workflows在Kubernetes上编排并行任务的能力。面对自建Argo Workflows的挑战,如稳定性、成本和安全性等问题,阿里巴巴云推出了全托管的Serverless Argo工作流,提供全托管、免运维、可观测和易集成的特点,显著提升了任务编排的效率和稳定性。适用于数据处理、科学计算、自动驾驶仿真等多个领域。
|
缓存 负载均衡 应用服务中间件
Nginx入门 -- Nginx 配置详解
Nginx入门 -- Nginx 配置详解
992 0
|
11月前
|
安全 网络安全
gbase8a centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
|
Java 开发工具 Windows
IDEA启动报端口占用 The port may already be in use or the connector may be misconfigured
【10月更文挑战第8天】本文介绍了在使用IDEA开发工具时遇到的端口占用问题及其解决方法。首先尝试关闭IDEA和Java进程,若无效则通过命令行查询并结束占用端口的进程,以确保项目顺利启动。
|
存储 关系型数据库 MySQL
【阿里规约】阿里开发手册解读——数据库和ORM篇
从命名规范、建表规范、查询规范、索引规范、操作规范等角度出发,详细阐述MySQL数据库使用过程中所需要遵循的各种规范。
【阿里规约】阿里开发手册解读——数据库和ORM篇
|
供应链 JavaScript 前端开发
25个常见的python系统设计源码(python+mysql+vue)
25个常见的python系统设计源码(python+mysql+vue)
430 3
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用合集之2.2.1版本同步mysql数据写入doris2.0 ,同步完了之后增量的数据延迟能达到20分钟甚至一直不写入如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
324 1
|
JavaScript 前端开发 NoSQL
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行
【5月更文挑战第11天】MongoDB 的 JavaScript 引擎允许在服务器端直接执行脚本,提升效率并实现定制化操作。脚本环境提供独立但与数据库关联的运行空间,引擎负责脚本的解析、编译和执行。执行过程包括脚本提交、解析、编译和执行四个步骤。掌握脚本逻辑设计和 JavaScript 语言特性对于高效利用这一功能至关重要。例如,通过脚本可以计算商品总销售额,增强数据库操作的灵活性。
282 1
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行