当前位置: 首页 > article >正文

文件操作和IO

一、Java中操作文件

Java 中通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意,有 File 对象,并不代表真实存在该文件。

1.1File常见属性

在这里插入图片描述

1.2File常见构造方法

在这里插入图片描述
示例:

import java.io.File;
 
public class FileDemo1 {
    public static void main(String[] args) {
        File pFile = new File("d:\\");
 
        //构造方法1
        File file = new File(pFile, "a.txt");
        System.out.println(file.getPath());
 
        //构造方法2【重点-常用】
        File file2 = new File("d:\\b.txt");
        System.out.println("文件2路径:" + file2.getPath());
 
        //构造方法3
        File file3 = new File("d:\\", "c.txt");
        System.out.println(file3.getPath());
    }
}

在这里插入图片描述

2.3常用方法

在这里插入图片描述

2.3.1观察get系列的特点和差异

import java.io.File;
import java.io.IOException;
 
public class FileDemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("../a.txt");
        System.out.println("文件名称:" + file.getName());
        System.out.println("文件目录(getPath):" + file.getPath());
        System.out.println("文件绝对路径:" + file.getAbsolutePath());
        System.out.println("文件标准路径:" + file.getCanonicalPath());
    }
}

在这里插入图片描述

1.绝对路径时,三者⼀致。
2.相对路径时:
getPath() 是相对路径本身。
getAbsolutePath() 是项目目录 + 相对路径本身。
getCanonicalPath() 可以解析相对路径,得到争取的路径。

2.3.2文件判断与创建

import java.io.File;
import java.io.IOException;
 
public class FileDemo3 {
    public static void main(String[] args) throws IOException {
        File file = new File("z.txt");
        System.out.println("文件是否存在:" + file.exists());
        System.out.println("是否为文件夹:" + file.isDirectory());
        System.out.println("是否为文件:" + file.isFile());
        System.out.println();
 
        boolean result = file.createNewFile(); //创建文件
        System.out.println("文件创建:" + result);
        System.out.println("文件是否存在:" + file.exists());
        System.out.println("是否为文件夹:" + file.isDirectory());
        System.out.println("是否为文件:" + file.isFile());
        System.out.println();
 
        File file2 = new File("c.txt");
        if(!file2.exists()) { //文件不存在,创建文件
            System.out.println("创建文件:" + file2.createNewFile());
        }
        System.out.println("是否为文件夹:" + file2.isDirectory());
        System.out.println("是否为文件:" + file2.isFile());
    }
}

在这里插入图片描述
如果文件或文件夹不存在,使用 isDirectory 和 isFile 判断都为 false.

2.3.3文件存在删除/不存在创建

import java.io.File;
import java.io.IOException;
 
public class FileDemo4 {
    public static void main(String[] args) throws IOException {
        //先得到一个file对象
        File file = new File("a.txt");
        //判断file对象是否存在
        if(file.exists()) {
            //如果存在则删除文件
            boolean result = file.delete();
            System.out.println("文件删除:" + result);
        } else {
            //如果不存在则创建文件
            boolean result = file.createNewFile();
            System.out.println("新建文件:" + result);
        }
    }
}

二、文件内容的读写(数据流)

2.1InputStream输入流

InputStream输入流是用来读取数据的

2.1.1 InputStream常用方法

在这里插入图片描述
InputStream 只是⼀个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输⼊设备都可以对应⼀个 InputStream 类,我们现在只关心从文件中读取,所以使用 FileInputStream。

2.1.2 FileInputStream

构造方法
在这里插入图片描述
读取文件中的内容:

方式1:每次只能读取一个字符

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
 
public class InputStreamDemo1 {
    public static void main(String[] args) {
        //1.创建流对象 try-catch
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("c.txt");
            //2.读写操作
            while(true) {
                int c = inputStream.read();
                //如果流返回的是-1,说明数据已经读取完了
                if(c == -1) break;
                Thread.sleep(200);
                System.out.printf("%c", c);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException exception) {
            exception.printStackTrace();
        } finally {
            //3.关闭流
            if(inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

改进版:在JDK1.7之后可以使用try-catch-resource

import java.io.FileInputStream;
import java.io.InputStream;
 
public class InputStreamDemo2 {
    public static void main(String[] args) {
        //1.创建流对象 try-catch-resource(诞生于JDK1.7)
        try(InputStream inputStream = new FileInputStream("c.txt")) {
            //2.读写操作
            while(true) {
                int c = inputStream.read();
                //如果流返回的是-1,说明数据已经读取完了
                if(c == -1) break;
                Thread.sleep(200);
                System.out.printf("%c", c);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
方式2:可以将字符一次性全部读取出来

import java.io.FileInputStream;
import java.io.InputStream;
 
/**
 * 一次性读取
 */
public class InputStreamDemo3 {
    public static void main(java.lang.String[] args) {
        try(InputStream inputStream = new FileInputStream("c.txt")) {
            byte[] bytes = new byte[1024];
            while(true) { //如果数据超过了byte容量,会读取多次
                int c = inputStream.read(bytes);
                if(c == -1) break;
                Thread.sleep(200);
                System.out.println(new String(bytes, "utf-8"));
            }
        } catch (Exception e) {
        }
    }
}

在这里插入图片描述

2.1.3使用scanner进行数据读取

在这里插入图片描述

import java.io.FileInputStream;
import java.util.Scanner;
 
public class InputStreamDemo4 {
    public static void main(String[] args) {
        try(FileInputStream inputStream = new FileInputStream("c.txt")) {
            try(Scanner scanner = new Scanner(inputStream, "utf8")) {
                while(scanner.hasNext()) {
                    System.out.println(scanner.nextLine());
                }
            }
        } catch (Exception e) {
        }
    }
}

在这里插入图片描述

2.2OutputStream:输出流

OutputStream输出流,是进行数据写入的

2.2.1OutputStream常用方法

在这里插入图片描述
OutputStream 同样只是⼀个抽象类,要使⽤还需要具体的实现类。我们现在还是只关心写入文件中,所以使用FileOutputStream。

2.2.2 FileOutputStream

示例一:每次写入一个数据

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
/**
 * 写入,每次写入一个字符
 */
public class OutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("mytest.txt");
        if(!file.exists()) {
            //新建文件
            System.out.println("新建文件:" + file.createNewFile());
        }
        //文件写入操作
        try(OutputStream outputStream = new FileOutputStream(file)) {
            outputStream.write('H');
            outputStream.write('e');
            outputStream.write('l');
            outputStream.write('l');
            outputStream.write('o');
            outputStream.flush();
        }
    }
}

示例二:每次按批量进行数据写入

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
public class OutputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        File file = new File("mytest.txt");
        if(!file.exists()) {
            file.createNewFile();
        }
        //写入操作
        try(OutputStream outputStream = new FileOutputStream(file)) {
            byte[] bytes = new byte[]{
                    'H', 'i'
            };
            outputStream.write(bytes);
            outputStream.flush();
        }
    }
}

在这里插入图片描述

示例二另一个版本:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
 
public class OutputStreamDemo3 {
    public static void main(String[] args) throws IOException {
        File file = new File("mytest.txt");
        if(!file.exists()) {
            file.createNewFile();
        }
        //写入操作
        try(OutputStream outputStream = new FileOutputStream(file)) {
            String msg = "hello, world";
            outputStream.write(msg.getBytes(StandardCharsets.UTF_8));
            outputStream.flush();
        }
    }
}

在这里插入图片描述

2.2.3使用PrintWriter进行写入

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
 
public class OutputStreamDemo4 {
    public static void main(String[] args) throws IOException {
        File file = new File("mytest.txt");
        if(!file.exists()) file.createNewFile();
        try(PrintWriter printWriter = new PrintWriter(file)) {
            printWriter.println("这是第一行数据");
            printWriter.println("这是第二行数据");
            printWriter.printf("我叫:%s,今年:%d,至今未婚", "张三", 22);
            printWriter.flush();
        }
    }
}

在这里插入图片描述
以上数据写入方式,都会进行数据的覆盖

2.2.4 使用FileWriter追加数据

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
public class OutputStreamDemo4 {
    public static void main(String[] args) throws IOException {
        File file = new File("mytest.txt");
        if(!file.exists()) file.createNewFile();
 
        //数据追加
        try(FileWriter fileWriter = new FileWriter(file, true)) {
            fileWriter.append("我是追加的数据II\n");
            fileWriter.flush();
        }
    }
}

在这里插入图片描述


http://www.kler.cn/a/17780.html

相关文章:

  • uniapp打包华为,提示请提供64位版本软件包后再提交审核
  • void * 指针与整数进行加减运算
  • 软件工程的基础和核心理论概念
  • 用户裂变数据分析
  • Visual Studio Code 端口转发功能详解
  • ReactPress:构建高效、灵活、可扩展的开源发布平台
  • 机器视觉工程师,听我一句劝,别去外包,干了三年,废了....对女人没了兴趣
  • 【Unity编辑器】拓展Project视图
  • 复兴号列车司机室
  • Midjourney之logo设计(建议收藏)
  • 杂乱之Android的字体相关类Typeface
  • 一道2023年数学分析真题
  • 【Linux】Linux安装Nexus(图文解说详细版)
  • 基于numpy的鸢尾花数据获取、处理等操作。
  • Android14新权限机制
  • 2023-05-04 LeetCode每日一题(摘水果)
  • 行为型模式-解释器模式
  • 了解进程控制
  • 错题汇总03
  • 顺序表和链表优缺点以及区别
  • MySQL索引
  • 涨薪60%,从小厂逆袭,坐上美团技术专家(面经+心得)
  • Java——和为S的连续正数序列
  • 【C++】机房预约系统
  • 使用【SD-WEBUI】插件生成单张图包含多个人物:分区域的提示词
  • bevfusion