Java 文件读写

标签: Java & Spring Framework

Java 文件读写

Gary

文件概述

  • 文件系统是有OS(操作系统)来管理的

  • 文件系统和Java进程是平行的,是两套系统

  • 文件系统是有文件夹和文件的递归组合而成的

  • 文件目录的分隔符

    • Linux/Unix 用/来分开
    • Windows用\来分开,涉及到转译,在程序当中需要使用/或者\替代
  • 文件包包括文件里面的内容和文件基本属性

  • 文件基本属性:名称,大小,拓展名,修改时间等

Java中的文件类

File 类

  • File类本身与OS是没有关系的,但会受到OS的权限限制
  • 注意:File不涉及到具体的文件内容,只涉及属性

NIO包

Java 7提出NIO包,提出了新的文件系统类

  • 这是对File 类进行了有益的补充
  • example:文件复制和移动,文件的相对路径,文件的遍历目录,递归遍历目录,递归删除目录…

code

import java.io.File;
import java.io.IOException;

public class Main {

    public static void main(String[] args) {
        //创建目录
        File d=new File("e:/temp");
        if(!d.exists()){
            d.mkdirs();//创建多级目录
        }
        System.out.println("Is d a directory"+d.isDirectory());
        //创建文件
        File file=new File("e:/temp/test.txt");
        if(!file.exists()){
            try{
                file.createNewFile();//创建test.txt
            }catch (IOException e){
                //权限不足无法访问
                e.printStackTrace();
            }
        }
        //输出文件相关属性
        System.out.println("Is file a file?" +file.isFile());
        System.out.println("Name:"+file.getName());
        System.out.println("Parent:"+file.getParent());
        System.out.println("Path:"+file.getPath());
        System.out.println("Size:"+file.length()+"bytes");
        System.out.println("Last Modified time:"+ file.lastModified()+"ms");

        //遍历d目录相面所有文件的信息
        System.out.println("list files in d directory");
        File[] files=d.listFiles();
        for(File f:files){
            System.out.println(f.getPath());
        }
        //删除文件
//        file.delete();
        //删除目录
//        d.delete();
    }
}

output:

Is d a directorytrue
Is file a file?true
Name:test.txt
Parent:e:\temp
Path:e:\temp\test.txt
Size:0bytes
Last Modified time:1602661778150ms
list files in d directory
e:\temp\test.txt

获取Path的方法

在这里插入图片描述

在这里插入图片描述

读写实例

code

package com.demo;

import java.io.*;

/**
 * @Author: lhb
 * @CreateTime: 2019-07-01 17:07:01
 * @Description: Java读取txt文件和写入txt文件
 */
public class Test {

    public static void main(String args[]) {
        writeFile();
        //readFile();
    }

    /**
     * 写入TXT文件
     */
    public static void writeFile() {

        String path = "D:/test.txt";//路径的test.txt文件

        File file; //使用File类打开文件
        FileOutputStream fileOutputStream;//建立一个文件输出流对象fileOutputStream
        OutputStreamWriter outputStreamWriter; //建立一个输出流对象outputStreamWriter
        BufferedWriter bufferedWriter;//文件操作
        try {
            // 1.使用File类打开一个文件
            file = new File(path);
            file.createNewFile(); // 创建新文件

            //  2. 通过字节流或字符流的子类,指定输出的位置
            fileOutputStream = new FileOutputStream(file);
            outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            bufferedWriter = new BufferedWriter(outputStreamWriter);
        // 3.进行读/写操作(BufferedReader / BufferedWriter)
        bufferedWriter.write("hello world!\r\n");
        bufferedWriter.write("你好!\r\n");
        bufferedWriter.flush(); // 把缓存区内容压入文件

        // 4.关闭输入/输出
        bufferedWriter.close(); // 关闭
        fileOutputStream.close();
        outputStreamWriter.close();

        System.out.println("写入文件成功!");
    } catch (IOException e) {
        e.printStackTrace();
    }

}

/**
 * 读取TXT文件
 */
public static void readFile() {

    String path = "D:/test.txt";//路径的test.txt文件

    File file; //使用File类打开文件
    FileInputStream fileInputStream;
    InputStreamReader inputStreamReader; //建立一个文件输入流对象inputStreamReader
    BufferedReader bufferedReader;
    try {
        // 1.使用File类打开一个文件
        file = new File(path);

        //  2. 通过字节流或字符流的子类,指定输出的位置
        fileInputStream = new FileInputStream(file);
        inputStreamReader = new InputStreamReader(fileInputStream);
        bufferedReader = new BufferedReader(inputStreamReader);

        // 3.进行读/写操作(BufferedReader / BufferedWriter)
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println("读取文件内容:" + line);
        }

        // 4.关闭输入/输出
        fileInputStream.close();
        inputStreamReader.close();
        bufferedReader.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

JPG文件搜索

import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;

/**
 * Authored by Gary on 2020/10/14.
 **/


class Search implements FileVisitor{
    private final PathMatcher matcher;
    public Search(String ext){
        matcher= FileSystems.getDefault().getPathMatcher("glob:"+ext);
    }
    public void judgeFile(Path file)throws IOException{
        Path name=file.getFileName();
        if(name!=null&& matcher.matches(name)){
            //文件名称已经匹配
            System.out.println("Searched file was found:"+name+"in"+file.toRealPath().toString());
        }
    }

    @Override
    public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs) throws IOException {
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) throws IOException {
        judgeFile((Path) file);
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFileFailed(Object file, IOException exc) throws IOException {
        //如果有必要可以自己加上报错代码
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult postVisitDirectory(Object dir, IOException exc) throws IOException {
        System.out.println("Visited:"+(Path)dir);
        return FileVisitResult.CONTINUE;
    }
}


public class SearchJPGFiles {
    //查找该目录和子目录下面的JPG文件
    public static void main(String[] args) throws IOException {
        String ext="*.jpg";
        Path fileTree=Paths.get("e:/temp/");
        Search walk=new Search(ext);
        EnumSet<FileVisitOption> opts=EnumSet.of(FileVisitOption.FOLLOW_LINKS);
        Files.walkFileTree(fileTree, opts, Integer.MAX_VALUE, walk);
    }
}
版权声明:本文为Garyboyboy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Garyboyboy/article/details/109077008

智能推荐

idea基础–(7)–jsp页面Controller路径自动识别的问题“Cannot resolve controller URL ...”,Cannot resolve variable

idea之所以强大,就是强大的代码提示和联想功能,写起代码来简直不要太爽。但是这几天我发现在我的jsp页面中访问controller路径的时候不会自动提示了,对于这么严谨的我肯定要找出原因啊,哈哈。 最终效果:按住ctrl,同时点击左键会自动跳转到对应的controller代码块,爽。 需要同时满足的条件 JSP页面顶部包含如下代码: 在idea的项目设置中显示如下:  若显示的是spring a...

26_Python基础_继承

面向对象三大特性: 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用, 相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,  产生不同的执行结果,  增加代码的灵活度 1.  单继承 1.1 概念 继承的概念:&...

循环

与任何程序设计语言一样Java利用条件语句与循环结构确定流程控制,一下总结一下Java中的循环语句: while do while for switch 对于golang来说: switch非常灵活。从第一个expr为true的case开始执行,如果case带有fallthrough,程序会继续执行下一条case,不会再判断下一条case的expr,如果之后的case都有fallthrough,d...

1638 统计只差一个字符的子串数目(动态规划)

1. 问题描述: 给你两个字符串 s 和 t ,请你找出 s 中的非空子串的数目,这些子串满足替换一个不同字符以后,是 t 串的子串。换言之,请你找到 s 和 t 串中恰好只有一个字符不同的子字符串对的数目。比方说, "computer" 和 "computation"...

websocket基本原理

HTTP中一个request只能有一个response。而且这个response也是被动的,不能主动发起 因此过去的服务端推送信息是通过客户端不停的轮询实现的 websocket是双向通信协议,提供了服务端主动推送信息的能力 需要客户端(浏览器)和服务端同时支持 如果经过代理的话,还需要代理支持,否则有些代理在长时间无通信时会自动切断连接 因此WS为了保证连接不被断掉,会发心跳 WebSocket...

猜你喜欢

mybatis+ehcache二级缓存

导入jar包 mapper.xml文件开启二级缓存 pojo类实现序列化接口 配置ehcache.xml 测试...

python+opencv实现图像拼接

任务 拍摄两张图片去除相同部分,拼接在一起 原图 结果 步骤 读取两张图片 使用sift检测关键点及描述因子 匹配关键点 处理并保存关键点 得到变换矩阵 图像变换并拼接 代码实现 扩展 这里对右边图像进行变换,右边变得模糊,可以修改代码对左边图像变换 这里只有两张图片拼接,可以封装实现多张图片拼接 可以修改代码实现上下图片的拼接...

python_sklearn机器学习算法系列之AdaBoost------人脸识别(PCA,决策树)

          注:在读本文之前建议读一下之前的一片文章python_sklearn机器学习算法系列之PCA(主成分分析)------人脸识别(k-NearestNeighbor,KNN)         本文主要目的是通过一个简单的小...

memmove函数与memcpy函数的模拟实现

memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。 下面给出两个函数的实现 首先,memmove函数。 实现的基本原理如下图。 具体代码如下: memcpy函数的实现很简单,就直接给出源代码了...