java读写文件的方法

阅读数:51 评论数:0

跳转到新版页面

分类

python/Java

正文

、概述

1、字节流

字节流的基本单位是字节(Byte),它是用来处理二进制的,字节流有两个基类:InputStream和OutputStream。

2、字符流

字符流的基本单位为Unicode,大小为两个字节,通常用来处理文本数据,它有两个基类:Reader 和Writer。

 

二、读文件的方法

1、Files.readAllLines

List<String> lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);

2、Files.readAllBytes

byte[] bytes = Files.readAllBytes(Paths.get(fileName));
String content = new String(bytes, StandardCharsets.UTF_8);

3、BufferedReader

        //带缓冲的流读取,默认缓冲区8k
        try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
        //java 8中这样写也可以
        try (BufferedReader br = Files.newBufferedReader(Paths.get(fileName))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }

4、Scanner(大文件)

        try (
                Scanner sc = new Scanner(new FileReader(fileName))) {
            //按行读取字符串
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

三、写文件

1、FileWriter

try (FileWriter fileWriter = new FileWriter(filepath)) { 
        fileWriter.append(content); 
}


    // 第二个 append 的参数传递一个 true = 追加文件的意思 
    try (FileWriter fileWriter = new FileWriter(filepath, true)) { 
        fileWriter.append(content); 
    } 

2、BufferedWriter

如果我们不使用缓冲区,那么每次写操作 CPU 都会和低速存储设备也就是磁盘进行交互,那么整个写入文件的速度就会受制于低速的存储设备(磁盘)。但如果使用缓冲区的话,每次写操作会先将数据保存在高速缓冲区内存上,当缓冲区的数据到达某个阈值之后,再将文件一次性写入到磁盘上。因为内存的写入速度远远大于磁盘的写入速度,所以当有了缓冲区之后,文件的写入速度就被大大提升了。

  try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filepath))) { 
        bufferedWriter.write(content); 
    } 

3、PrintWriter

无论是PrintWriter还是BufferedWriter都是基于FileWriter的。

  try (PrintWriter printWriter = new PrintWriter(new FileWriter(filepath))) { 
        printWriter.print(content); 
    } 

4、FileOutputStream

 try (FileOutputStream fileOutputStream = new FileOutputStream(filepath)) { 
        byte[] bytes = content.getBytes(); 
        fileOutputStream.write(bytes); 
    } 

5、BufferedOutputStream

try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( 
            new FileOutputStream(filepath))) { 
        bufferedOutputStream.write(content.getBytes()); 
    } 

6、Files

Files.write(Paths.get(filepath), content.getBytes()); 



相关推荐

打开Java的JAR文件我们经常可以到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息。

一、概述 项目不大的话,我们可以选择ftp+nginx的方式来实现文件服务器,如果文件需求量大的话,建议使用分布式文件服务器(如minio或者阿里云OSS等),它对横向扩展的支持比较好。 二、前置知识

1、基本类型 在程序设计中经常用到一系列类型(基本类型),它们需要特殊对待。对于这些类型,Java采取与C和C++相同的方法,也就是说,不用new来创建变量,于是创建一个并非引

1、直接常量 为了编译器可以准确的知道要生成什么样的类型,可以给直接常量后面添加后缀字符标志它的类型,若为L表示long,F表示float,D表示double。也可以利用前缀表示进制,0x表示十六进制

Java完全采用动态内存分配方式。每当想创建新对象时,就需要使用new关键字来构建此对象实例。 1、this 在构造器中,如果为this添加了参数列表,那么就有了

一、类的继承 1、说明 (1)extends关键字用于类的继承。 (2)在C++中,方法的动态绑定是使用virtual关键字来实现的,而在Java中,动态绑定是默认的形为,不需要添加额外的关键字。 (

1、类型信息 指程序能够在运行时发现和使用类型信息,我们一般使用两种方式来实现运行时对象和类的信息:传统的RTTI和反射机制。 (1)class对象 <p

用于描述Java源代码,使得我们能够以将由编译器来测试和验证的格式,存储有关程序的额外信息。使用时在@后面跟注解的名字。 1、预定义的三个注解<

一、创建线程 创建线程有四种方式:继承Thread类、实现Runnable接口、实现Callable接口、通过线程池创建。 1、继承Thread 重写run方法。 class A extends Th

一、Collection接口 Collection接口的iterator和toArray方法都用于获得集合中的“所有元素”。前者返回一个“iterator”对象,后者返回一个包含集合中所有元素的数组。