起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > Java读写文件教程

Java读写文件教程

时间:2022-06-08 14:16:52来源:IT培训网 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java读写文件

前言: 1.文件的Java I/O(输入/输出) (1)概述 Java 提供了java.nio.file读取和写入文件的 API。该类InputStream是表示字节输入流的所有

1.文件的Java I/O(输入/输出)

(1)概述

Java 提供了java.nio.file读取和写入文件的 API。该类InputStream是表示字节输入流的所有类的超类。

(2)用Java读取文件

要读取文本文件,您可以使用该Files.readAllBytes方法。下面的清单演示了此方法的用法。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
// somewhere in your code
String content = Files.readString(Path.of("resources", "work", "input.xml"));

要将文本文件逐行读取到List类型String结构中,您可以使用该Files.readAllLines方法。

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

Files.readAllLines使用 UTF-8 字符编码。它还确保在读取所有字节后或发生异常时关闭文件。

(3)逐行读取和过滤

该Files.lines方法允许逐行读取文件,提供流。这个流可以被过滤和映射。 Files.lines读取文件内容后不会关闭文件,因此应将其包装在 try-with-resource 语句中。

在下面的示例中,每行末尾不必要的空格被删除,空行是过滤器。

//read all lines and remove whitespace (trim)
//filter empty lines
//and print result to System.out
Files.lines(new File("input.txt").toPath())
    .map(s -> s.trim())
 .filter(s -> !s.isEmpty())
 .forEach(System.out::println);

下一个示例演示如何根据某个正则表达式过滤掉行。

Files.lines(new File("input.txt").toPath())
    .map(s -> s.trim())
 .filter(s -> !s.matches("yourregularexpression"))
 .forEach(System.out::println);

MANIFEST.MF下一个示例从位于文件夹中的文件中提取以“Bundle-Version:”开头的行META-INF。它删除前缀并删除所有前导和尾随空格。

package com.vogella.eclipse.ide.first;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Optional;
import java.util.stream.Stream;
public class ReadMANIFESTFile {
    public static void main(String[] args) throws IOException {
        String versionString = readStreamOfLinesUsingFiles();
        System.out.println(versionString);
    }
    private static String readStreamOfLinesUsingFiles() throws IOException {
        Stream<String> lines = Files.lines(Paths.get("META-INF", "MANIFEST.MF"));
        Optional<String> versionString = lines.filter(s -> s.contains("Bundle-Version:")).map(e-> e.substring(15).trim()).findFirst();
        lines.close();
        if (versionString.isPresent())
        {
            return versionString.get();
        }
        return "";
    }
}

(4)用Java编写文件

要写入文件,您可以使用以下方法:

Files.write(stateFile.toPath(), content.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE);

(5)使用 Files.list() 列出所有文件和子目录

您可以访问与 Java 程序的当前执行目录相关的文件。要访问运行 Java 程序的当前目录,可以使用以下语句。

// writes all files of the current directory
Files.list(Paths.get(".")).forEach(System.out::println);

(6)如何识别当前目录

String currentDir = System.getProperty("user.dir");

2.练习:读写文件

创建一个名为com.vogella.java.files的新 Java 项目。创建以下FilesUtil.java类。

package com.vogella.java.files;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
public class FilesUtil {
    public static String readTextFile(String fileName) throws IOException {
        String content = new String(Files.readAllBytes(Paths.get(fileName)));
        return content;
    }
    public static List<String> readTextFileByLines(String fileName) throws IOException {
        List<String> lines = Files.readAllLines(Paths.get(fileName));
        return lines;
    }
    public static void writeToTextFile(String fileName, String content) throws IOException {
        Files.write(Paths.get(fileName), content.getBytes(), StandardOpenOption.CREATE);
    }
}

要测试这些方法,请在项目文件夹中创建一个file.txt包含一些内容的文本文件。创建以下Main类并运行它。

package com.vogella.java.files;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
  public static void main(String[] args) throws IOException {
    String input = FilesUtil.readTextFile("file.txt");
    System.out.println(input);
    FilesUtil.writeToTextFile("copy.txt", input);
    System.out.println(FilesUtil.readTextFile("copy.txt"));
    FilesUtil.readTextFileByLines("file.txt");
    Path path = Paths.get("file.txt");
  }
}

3.示例:递归列出一个目录的所有文件

Java 8 提供了一个很好的流来处理树中的所有文件。

Files.walk(Paths.get(path))
     .filter(文件::isRegularFile)
     .forEach(System.out::println);

4. 示例:删除包含所有子目录和文件的目录

删除目录及其所有内容。

String stringPath="...yourPath...";
Path path = new File(stringPath).toPath();
Files.walk(path)
    .sorted(Comparator.reverseOrder())
    .map(Path::toFile)
.forEach(File::delete);

5. 从你的项目/jar 中读取资源

.getClass().getResourceAsStream()您可以通过任何对象的方法链从项目或 jar 文件中读取资源。

文章出自:http://qh.itpxw.cn/peixun/software/2022121593.html

文章标题:Java读写文件教程



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容