返回顶部
首页 > 资讯 > 后端开发 > Python >Java I/O流使用示例详解
  • 767
分享到

Java I/O流使用示例详解

Java I/O流使用Java I/O流 2022-11-13 14:11:42 767人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.java io包2.创建文件3.获取文件信息4.目录操作5.字节输入流InputStream6.字节输出流FileOutputStream7.模拟文件拷贝8.字符输入流Fil

1.java IO包

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

文件依靠流进行传输,就像快递依托于快递员进行分发

Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

下图是一个描述输入流和输出流的类层次图。

2.创建文件

方式一:


@Test
public void createFile01() {
    String filePath = "D://1.txt";
    File file = new File(filePath);
    try {
        file.createNewFile();
        System.out.println("文件创建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

第二种方式:


@Test
public void createFile02() {
    File parentFile = new File("D:\\");
    String fileName = "news.txt";
    File file = new File(parentFile, fileName);
    try {
        file.createNewFile();
        System.out.println("文件创建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

第三种方式:


@Test
public void createFile03() {
    String parentPath = "D:\\";
    String fileName = "my.txt";
    File file = new File(parentPath, fileName);
    try {
        file.createNewFile();
        System.out.println("文件创建成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

3.获取文件信息

示例代码:


@Test
public void info() {
    // 创建文件对象
    File file = new File("D:\\news.txt");
    // 获取文件名字
    System.out.println(file.getName());
    // 获取文件路径
    System.out.println(file.getAbsolutePath());
    // 获取文件父亲目录
    System.out.println(file.getParent());
    // 获取文件大小(字节)
    System.out.println(file.length());
    // 文件是否存在
    System.out.println(file.exists());
    // 是不是一个文件
    System.out.println(file.isFile());
    // 是不是一个目录
    System.out.println(file.isDirectory());
}

4.目录操作

案例一:判断指定目标是否存在,如果存在就删除

// 判断指定目标是否存在,如果存在就删除
String filePath = "D:\\news.txt";
File file = new File(filePath);
if (file.exists()) {
    if (file.delete()) {
        System.out.println("删除成功!");
    } else {
        System.out.println("删除失败!");
    }
} else {
    System.out.println("文件不存在!");
}

案例二:判断目录是否存在,如果存在即删除

// 判断目录是否存在,如果存在即删除
String dirPath = "D:\\demo";
File file1 = new File(dirPath);
if (file1.exists()) {
    if (file1.delete()) {
        System.out.println("删除成功!");
    } else {
        System.out.println("删除失败!");
    }
} else {
    System.out.println("目录不存在!");
}

案例三:判断指定目录是否存在,不存在就创建目录

// 判断指定目录是否存在,不存在就创建目录
String persondir = "D:\\demo\\a\\b\\c";
File file2 = new File(persondir);
if (file2.exists()) {
    System.out.println("该目录存在!");
} else {
    if (file2.mkdirs()) {
        System.out.println("目录创建成功!");
    } else {
        System.out.println("目录创建失败!");
    }
}

注意:创建多级目录,使用mkdirs,创建一级目录使用mkdir

5.字节输入流InputStream

InputStream抽象类是所有类字节输入流的超类

  • FileInputStream 文件输入流
  • BufferedInputStream 缓冲字节输入流
  • ObjectInputStream 对象字节输入流

FileInputStream

文件输入流,从文件中读取数据,示例代码:

单个字节的读取,效率较低:


@Test
public void readFile01() throws IOException {
    String filePath = "D:\\hacker.txt";
    int readData = 0;
    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(filePath);
        // 读文件,一个字符一个字符读取,返回字符的ASCII码,文件尾部返回-1
        while ((readData = fileInputStream.read()) != -1) {
            System.out.print((char)readData);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        // 关闭流资源
        fileInputStream.close();
    }
}

注意:使用字节流的方式,无法读取文件中的中文字符,如需读取中文字符,最好使用字符流的方式

使用byte数组的方式读取,这使得可以读取中文,并且有效的提升读取效率:


@Test
public void readFile02() throws IOException {
    String filePath = "D:\\hacker.txt";
    int readData = 0;
    int readLen = 0;
    // 字节数组
    byte[] bytes = new byte[8]; // 一次最多读取8个字节

    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(filePath);
        // 读文件,从字节数组中直接读取
        // 如果读取正常,返回实际读取的字节数
        while ((readLen = fileInputStream.read(bytes)) != -1) {
            System.out.print(new String(bytes, 0, readLen));
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        // 关闭流资源
        fileInputStream.close();
    }
}

6.字节输出流FileOutputStream

使用示例:(向hacker.txt文件中加入数据)


@Test
public void writeFile() throws IOException {
    String filePath = "D:\\hacker.txt";
    FileOutputStream fileOutputStream = null;
    try {
        fileOutputStream = new FileOutputStream(filePath);
        // 写入一个字节
        // fileOutputStream.write('G');
        // 写入一个字符串
        String s = "hello hacker!";
        // fileOutputStream.write(s.getBytes());
        // 写入字符串指定范围的字符
        fileOutputStream.write(s.getBytes(),0,3);
    } catch (FileNotFoundException e) {
        throw new RuntimeException(e);
    } finally {
        assert fileOutputStream != null;
        fileOutputStream.close();
    }
}

我们发现,使用这样的FileOutputStream构造器无法实现向文件中追加内容,只能进行覆盖,我们可以在初始化对象的时候这样解决:

fileOutputStream = new FileOutputStream(filePath,true);

7.模拟文件拷贝

我们可以结合字节输入和输出流模拟一个文件拷贝的程序:


@Test
public void Copy() throws IOException {
    String srcFilePath = "D:\\hacker.txt";
    String destFilePath = "D:\\hello.txt";
    FileInputStream fileInputStream = null;
    FileOutputStream fileOutputStream = null;
    try {
        fileInputStream = new FileInputStream(srcFilePath);
        fileOutputStream = new FileOutputStream(destFilePath);
        // 定义字节数组,提高效率
        byte[] buf = new byte[1024];
        int readLen = 0;
        while ((readLen = fileInputStream.read(buf)) != -1) {
            // 边读边写
            fileOutputStream.write(buf, 0, readLen);
        }
        System.out.println("拷贝成功!");
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (fileInputStream != null){
            fileInputStream.close();
        }
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
    }
}

8.字符输入流FileReader

字符输入流FileReader用于从文件中读取数据

示例:

import java.io.FileWriter;
import java.io.IOException;


public class FileWriteTest {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\hacker.txt";
        // 创建对象
        FileWriter fileWriter = null;
        try {
            char[] chars = {'a', 'b', 'c'};
            fileWriter = new FileWriter(filePath, true);
            // 写入单个字符
            // fileWriter.write('H');
            // 写入字符数组
            // fileWriter.write(chars);
            // 指定数组的范围写入
            // fileWriter.write(chars, 0, 2);
            // 写入字符串
            // fileWriter.write("解放军万岁!");
            // 指定字符串的写入范围
            fileWriter.write("hacker club", 0, 5);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // FileWriter是需要强制关闭文件或刷新流的,否则数据会保存失败
            fileWriter.close();
        }
    }
}

9.字符输出流FileWriter

字符输出流FileWrite用于写数据到文件中:

示例:

import java.io.FileWriter;
import java.io.IOException;


public class FileWriteTest {
    public static void main(String[] args) throws IOException {
        String filePath = "D:\\hacker.txt";
        // 创建对象
        FileWriter fileWriter = null;
        try {
            char[] chars = {'a', 'b', 'c'};
            fileWriter = new FileWriter(filePath, true);
            // 写入单个字符
            // fileWriter.write('H');
            // 写入字符数组
            // fileWriter.write(chars);
            // 指定数组的范围写入
            // fileWriter.write(chars, 0, 2);
            // 写入字符串
            // fileWriter.write("解放军万岁!");
            // 指定字符串的写入范围
            fileWriter.write("hacker club", 0, 5);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // FileWriter是需要强制关闭文件或刷新流的,否则数据会保存失败
            fileWriter.close();
        }
    }
}

使用FileWriter,记得关闭文件或者刷新流!

到此这篇关于Java I/O流使用示例详解的文章就介绍到这了,更多相关Java I/O流内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java I/O流使用示例详解

本文链接: https://lsjlt.com/news/171826.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java I/O流使用示例详解
    目录1.java IO包2.创建文件3.获取文件信息4.目录操作5.字节输入流InputStream6.字节输出流FileOutputStream7.模拟文件拷贝8.字符输入流Fil...
    99+
    2022-11-13
    Java I/O流使用 Java I/O流
  • Java I/O流之打印流详细使用方法教程
    目录打印流打印流基本使用输出语句重定向总结打印流 打印流基本使用 打印流: 作用:打印流可以实现更方便、更高效的打印数据到文件中去。打印流一般是指:PrintStream,Prin...
    99+
    2023-01-31
    Java打印流 java打印流有什么用 java io流
  • Java I/O流实例之简历替换
    目录学习内容内容管理java文件I/O实例----生成报表总结学习内容 Java I/O 项目案例 内容管理 java文件I/O实例----生成报表 我们之前学习了两个重要的模块,一...
    99+
    2024-04-02
  • Java I/O 之File类的示例分析
    这篇文章主要为大家展示了“Java I/O 之File类的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java I/O 之File类的示例分析”这篇文章吧。File类Java使用Fil...
    99+
    2023-06-20
  • JAVA中I/O模型的详细讲解(附实例)
    也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介...
    99+
    2020-06-20
    java教程 I/O
  • Java 非阻塞I/O使用方法
    绝大部分知识与实例来自O'REILLY的《Java网络编程》(Java Network Programming,Fourth Edition,by Elliotte Rusty Harold(O'REILLY))。非阻塞I/O简介非阻塞I/...
    99+
    2023-05-31
    java 非阻塞 i/o
  • 关于java中I/O流的字节流与字符流的详细介绍
    一、绪论如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:字节流:InputStream(字节输入流)、OutputStream(字节输出流);字符流:Reader(字符输入流)、Writer(字符输出流);二、区别字节流是...
    99+
    2017-12-15
    java教程 java I/O 字节流 字符流
  • java使用Buffer进行I/O流操作的方法有哪些
    小编给大家分享一下java使用Buffer进行I/O流操作的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用Buffer进行I/O流操作除NIO外,使...
    99+
    2023-06-27
  • Java Stream流语法示例详解
    目录如何使用StreamStream的操作分类1、创建流2、操作流1)过滤2)映射3)匹配4)组合3、转换流如何使用Stream 聚合操作是Java 8针对集合类,使编程更为便利的方...
    99+
    2024-04-02
  • Java中I/O流读取数据不完整的问题解决
    目录一·问题描述:二·问题原因:三·解决办法:四·测试结果:成功一·问题描述: 1.利用Java的转换流去读取一...
    99+
    2024-04-02
  • Java InheritableThreadLocal使用示例详解
    目录引子InheritableThreadLocal简单使用InheritableThreadLocal原理分析引子 public class InheritableThreadLo...
    99+
    2024-04-02
  • 一看就懂的i++和++i示例代码详解
    目录一看就懂的i++和++i详解前言示例代码示例1示例2示例3示例4示例5示例答案i++ 和 ++i原理i++字节码分析表达式原则示例答案详解示例1详解示例2详解示例3详解示例4详解...
    99+
    2023-03-01
    i++和++i区别 i++和++i
  • flutter中使用流式布局示例详解
    目录简介Flow和FlowDelegateFlow的应用总结简介 我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整。这时候就会用到flo...
    99+
    2024-04-02
  • C/C++中I/O进阶详解及其作用介绍
    目录概述I/O 类库I/O 中的重载流对象标准输入流cin 流对象案例get 函数getline 函数eof 函数cout 流对象cerr 流对象clog 流对象概述 C++ 的输入...
    99+
    2024-04-02
  • Java控制流程示例代码详解
    目录用户交互Scanner、Scanner进阶使用用户交互ScannerScanner进阶使用顺序结构选择结构*if选择结构Switch选择结构循环结构*while循环do..whi...
    99+
    2024-04-02
  • Java使用Unsafe类的示例详解
    Unsafe 对象提供了非常底层的,操作内存、线程的方法,相当于开了后门。 在atomic类中CAS实现、LockSupport中park unpark的底层都调用了UnSafe中的...
    99+
    2024-04-02
  • Java的jstack命令使用示例详解
    目录jstack命令简介jstack命令参数-F参数-l参数-m参数-h 和 -help结尾jstack命令简介 jstack(Java Virtual Machine Stack ...
    99+
    2024-04-02
  • java中reduce在流的使用示例
    这篇文章主要介绍了java中reduce在流的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web...
    99+
    2023-06-14
  • Java使用HttpClient详细示例
    目录准备环节第一步:在pom.xml中引入HttpClient的依赖第二步:引入fastjson依赖详细使用示例GET无参:GET有参(方式一:直接拼接URL):GET有参(方式二:...
    99+
    2024-04-02
  • Python 异步之非阻塞流使用示例详解
    目录1. 异步流2. 如何打开连接3. 如何启动服务器4. 如何使用 StreamWriter 写入数据5. 如何使用 StreamReader 读取数据6. 如何关闭连接1. 异步...
    99+
    2023-03-22
    Python 异步非阻塞流 Python 异步
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作