IO初识233

news2024/11/19 21:14:57

绝对路径和相对路径

 路径是用来描述一个文件在电脑上的具体位置。

这里的 E:\绘画合集\CCE展会logo 2.0就是绝对路径

目录之间的分隔符可以用\也可以用/来表示

相对路径就是以一个基准路径(工作路径),以基准路径为起点往下走要怎么表示目标路径

例如如果基准路径是E:/绘画合集的话,相对路径就是.\CCE展会logo 2.0

现在新建了一个文件夹

 

如果基准路径是E:\绘画合集\CCE展会logo 2.0\新建文件夹,而我们要表示CCE展会logo 2.0的相对位置的时候,可以使用..\来返回上级目录,因此相对位置就是

../CCE展会logo 2.0

但是注意,WINDOWS下我们无法去表示此电脑这一级,最多就是E:/ C:/这样的

Java中操作文件

构造方法:

File(File parent,Stringchild)
根据父目录+孩子文件路径,创建一个新的File实例

File(String pathname)
根据文件路径创建一个新的File实例,路径可以是绝对路径或者相对路径

File(String parent,String child)
根据父目录+孩子文件路径,创建一个新的File实例,父目录用路径表示方法

方法:(名字,作用,返回类型)

getParent()
返回File对象的父目录文件路径
String

getName()
返回Flle对象的纯文件名称
String

getPath()
返回File对象的文件路径
String

getAbsolutePath()
返回 File对象的绝对路径
String

getCanonicalPath()
返回File对象的修饰过的绝对路径
String

exists()
判断File对象描述的文件是否真实存在
boolean

isDirectory()
判断File对象代表的文件是否是一个目录
boolean

isFile()
判断File对象代表的文件是否是一个普通文件
boolean

createNewFile()
根据File对象,自动创建一个空文件。成功创建后返回true
boolean

delete()
根据File对象,删除该文件。成功删除后返回 true
boolean

deleteOnExit()
根据File对象,标注文件将被删除,删除动作会到JVM运行结束时才会进行
void

list()
返回 File对象代表的目录下的所有文件名
String

listFiles()
返回File 对象代表的目录下的所有文件,以File 对象表示
File[]

mkdir()
创建File对象代表的目录
boolean

mkdirs()
创建 File 对象代表的目录,如果必要,会创建中间目录
boolean

renameTo(File dest)
进行文件改名,也可以视为我们平时的剪切、粘贴操作
boolean

canRead()
判断用户是否对文件有可读权限
boolean

canWrite()
判断用户是否对文件有可写权限
boolean

当我们用绝对路径去获取的时候

package threading;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 11:56
 */
public class L1140 {
    public static void main(String[] args) throws IOException {

        File f = new File("D:/test.txt");
//        File f = new File("./test.txt");
        System.out.println(f.getParent());
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsoluteFile());
        System.out.println(f.getCanonicalPath());
    }
}

 

用相对路径去获取的时候

package threading;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 11:56
 */
public class L1140 {
    public static void main(String[] args) throws IOException {

//        File f = new File("D:/test.txt");
        File f = new File("./test.txt");
        System.out.println(f.getParent());
        System.out.println(f.getName());
        System.out.println(f.getPath());
        System.out.println(f.getAbsoluteFile());
        System.out.println(f.getCanonicalPath());
    }
}

 这是因为基准目录的变化而导致的,直接用IDEA运行程序的话,基准目录就是项所在目录

File里包含的那个文件是不一定存在的,我们可以创建出来,如下:

package threading;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 18:02
 */
public class L1141 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");
        System.out.println(f.exists());
        //判断是否存在
        System.out.println(f.isDirectory());
        //判定是否是目录
        System.out.println(f.isFile());
        //判断是否是文件

        //把这个文件创建出来
        System.out.println("创建文件后:");
        f.createNewFile();
        
        System.out.println(f.exists());
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());

    }
}

创建目录实例:

package threading;

import java.io.File;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 18:07
 */
public class L1142 {
    public static void main(String[] args) {
//
//        File f = new File("./testDir");
        File f = new File("./testDir/aaa/bbb");
        f.mkdir();
        //上面这个只能创建单层目录(./testDir)
        f.mkdirs();
        //这个可以创建多层目录
    }
}

重命名操作实例:

package threading;

import java.io.File;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 18:10
 */
public class L1143 {
    public static void main(String[] args) {
        File srcFile = new File("aaa.txt");
        File destFile = new File("bbb.txt");
        srcFile.renameTo(destFile);
    }
}

 

 查看文件目录实例:

package threading;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 18:15
 */
public class L1144 {
    public static void main(String[] args) {
        File f = new File("./testDir");
        String[] results = f.list();
        //查看当前目录内容
        //使用result来接受结果
        System.out.println(Arrays.toString(results));
    }
}

 上面的文件操作,都是针对文件系统的操作(新增文件,珊瑚文件,新增目录,重命名,列表内容)。并不是对文件内容的操作

针对文件内容的操作,涉及的关键操作就是读文件和写文件。

Java标准库,在流的概念上(一次性写10字节和十次写一字节)这种概念上提供了一组类来完成读写文件的操作,主要分为字节流(以一个字节为基本单位)和字符流(以一个字符为基本单位)

操作二进制文件多使用字节流,操作文本文件多使用字符流。

字节流主要有(InputStream和OutputStream)FileInputStream FileOutputStream

字符流主要有(Read和Write)FileRead FileWrite

InputStream

read()
读取一个字节的数据,读出的结果作为rea的返回值。返回—1代表已经完全读完了
int

read(byte[] b)
最多读取b.length字节的数据到b中,返回实际读到的数量;—1代表以及读完了
int
参数b是存放输出结果的内容了,因此这里的b被称为输出型参数

read(byte[] b,int off,int len)
最多读取len—off字节的数据到b中,放在从 off开始,返回实际读到的数量;—1代表以及读完了
int

close()
关闭字节流
void

InputStream 只是一个抽象类,要使用还需要具体的实现类。关于InputStream的实现类有很多,基本可以认为不同的输入设备都可以对应一个InputStream类,我们现在只关心从文件中读取,所以使用FilelnputStream
因此InputStream无法被实例化

OutputStream

write(byte[] b)
把字节数组的所有内容,都写到文件中

write(int b)
写一个字节

write(byte[] b,int off,int len)
把b字节数组从下标off位置开始写,写len个字节

FilelnputStream

FilelnputStream(File file)
利用File构造文件输入流

FilelnputStream(String name)
利用文件路径构造文件输入流

字节流读文件实例:

先前已经往bbb.txt文件写了Hello World!,现在来进行读取操作

package threading;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 18:37
 */
public class L1145 {
    public static void main(String[] args) throws IOException {
        InputStream  inputStream = new FileInputStream("./bbb.txt");
        //这个过程相当于打开文件,相当于C中的fopen
        //要想读写文件,就得先打开。
        while (true){
            int b = inputStream.read();
            if(b==-1){
                break;
            }
            System.out.println(b);
        }
        inputStream.close();
    }
}

 

 我们可以发现读取的结果就是每个字符对应的ASCII码值。

字节流写文件实例:

package threading;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 20:41
 */
public class L1146 {
    public static void main(String[] args) throws IOException {
        OutputStream outputStream = new FileOutputStream("./bbb.txt");

        outputStream.write(97);
        outputStream.write(98);

        outputStream.close();

    }
}

原来写了Hello World!的文本被修改成了ASCII码为97和98的a和b。

只要outputstream写文件的时候,打开文件成功,就会把原有内容清空。

字符流读文件实例:

package threading;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 20:50
 */
public class L1147 {
    public static void main(String[] args) throws IOException {
        Reader reader = new FileReader("./bbb.txt");
        while (true){
            int ret = reader.read();
            if(ret == -1){
                break;
            }
            char ch = (char)ret;
            System.out.println(ch);
        }

        reader.close();
    }
}

 字符流写文件实例:

package threading;

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 21:10
 */
public class L1148 {
    public static void main(String[] args) throws IOException {
        Writer writer = new FileWriter("./bbb.txt");
        writer.write("hellp world");
        writer.close();
    }
}

 

tip:针对文本文件使用字符流来继续读取的时候,我们还可以使用Scanner来进行读取,如下:

package threading;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 21:15
 */
//使用scanner
public class L1149 {
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("./bbb.txt");

        Scanner scanner = new Scanner(inputStream);
        while (scanner.hasNext()){
            System.out.println(scanner.next());
        }
        inputStream.close();
    }
}
package threading;

import java.io.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 21:18
 */
public class L111491 {
    public static void main(String[] args) throws IOException {
        //针对文本文件,还可以使用printwriter来简化开发

        OutputStream outputStream = new FileOutputStream("./bbb.txt");
        try{
            PrintWriter writer = new PrintWriter(outputStream);

            writer.println("你好");
            writer.printf("a = %d\n", 10);

        }finally {
            outputStream.close();

        }
    }
}

 文件操作的时候一定要记得关闭文件,每次进程打开一个文件都会对应创建一个项在文件描述表里面,关闭文件就可以把表给释放掉,不关闭则表会一直占用位置,最后导致表项被耗尽,打开文件失败,文件资源泄露。

扫描指定目录,并找到名称中包含指定字符的普通文件:

package threading;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: admin
 * Date: 2023-01-14
 * Time: 21:34
 */
public class L111492 {
    public static void main(String[] args) throws IOException {
        //让用户输入信息
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要扫描的路径");
        String rootDirPath = scanner.next();

        File rootDir = new File(scanner.next());
        if(!rootDir.isDirectory()){
            System.out.println("你输入的目录不存在");
            return;
        }
        System.out.println("请输入要搜索的关键词");
        String toDeletc = scanner.next();

        //遍历目录
        scanDir(rootDir,toDeletc);


    }
    private static void scanDir(File rootDir,String toDelect) throws IOException {
        System.out.println("当前访问:" + rootDir.getCanonicalPath());
        File[] file = rootDir.listFiles();
        if(file == null){
            //说明是空目录
            return;
        }
        //如果不是空目录,递归遍历每个元素找
        for(File f : file){
            if(f.isDirectory()){
                scanDir(f,toDelect);
            }
            else {
                //不是目录,普通文件,判断是否符合要求
                checkdelete(f,toDelect);
            }
        }
    }
    private static void checkdelete(File f , String toDelect) throws IOException {
        if(f.getName().contains(toDelect)){
            System.out.println("该单词" + toDelect + "被" + f.getCanonicalPath() + "包含了,是否要删除(Y/N)");
            Scanner scanner = new Scanner(System.in);
            String choice = scanner.next();
            if(choice.equals("Y")||choice.equals("y")){
                f.delete();
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java字符串训练

Java字符串训练一、用户登录二、统计字符次数三、拼接字符串1. 使用String2. 使用StringBuilder四、字符串反转五、金额转换六、手机号屏蔽七、身份证信息查看八、敏感词替换九、对称字符串十、数字转罗马数字十一、调整字符串十二、打乱字符串一、用户登录 需求:已…

MySQL监控(一):了解SigNoz

1.SigNoz介绍 github SigNoz SigNoz官方文档 2022 年 11 大 MYSQL 监控工具 MySQL | 六个最常用的 MySQL 数据库监控工具 2.SigNoz安装 从官方文档上得知使用以下命令进行安装: git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/d…

SpringSecurity(十三)【授权】

十三、授权 什么是授权权限管理核心概念Spring Security 权限管理策略基于 URL 地址的权限管理基于方法的权限管理实战 权限管理 身份认证,就是判断一个用户是否为合法用户的处理过程。SpringSecurity中支持多种不同方式的认证,但是无论开发者使用那种方…

【uniapp】uniapp使用高德地图定位打包成安卓app的一些记录,比如打包后定位失效、

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、创建你的uniapp1.打开Dcloud开发者后台2.下载你的证书、获取你的SHA1安全码、证书私钥密码二、打开高德开放平台申请key1.打开官网2.创建一个应用三、在unia…

快速傅里叶变换FFT和逆变换的python编程

0. 预备知识 快速傅里叶变换旨在解决离散傅里叶变换DFT计算量大效率低的问题。当我们想要抑制噪声提取出某段信号中的有效信息时,如系统模型辨识或者是使用高精度力传感器测量人体腕部寸关尺脉搏信号这类应用,应该如何设计采样流程? 首先&a…

《通讯录》思路及代码实现详解

目录 一、通讯录功能实现的详细描述 二、通讯录的代码及思路实现 2、1 定义联系人结构体 2、2 初始化就结构体与释放动态开辟空间的实现 2、3 菜单打印 2、4 添加联系人信息 2、5 删除联系人信息 2、6 查询联系人信息 2、7 修改联系人信息 2、8 打印所有联系人信息 2、9 排序整…

75. 序列模型的代码实现

1. 训练 在了解了上述统计工具后,让我们在实践中尝试一下! 首先,我们生成一些数据:(使用正弦函数和一些可加性噪声来生成序列数据, 时间步为 1,2,…,1000 。) %matplotlib inline import torch from torch import nn…

新手nvm npm 卸载不用依赖包,项识别为 cmdlet、函数、脚本文件,等命令集合

nvm安装包:Releases coreybutler/nvm-windows GitHub下载ta就不用单独下载node了注意:vnm安装位置尽量不要动C:\Users\Administrator\AppData\Roaming\nvm\settings.txt增加下面代码node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.t…

java+Springboot交通事故档案管理系统

系统分为用户和管理员两个角色 用户的主要功能有: 1.用户注册和登陆系统 2.用户查看警察相关信息 3.用户查看我的相关事故信息,可以对交通事故进行交通申诉 4.用户查看交通申诉审核信息 5.退出登陆 管理员的主要功能有: 1.管理员输入账户登陆…

Metasploit渗透框架介绍及永恒之蓝复现

Metasploit渗透框架介绍及永恒之蓝复现一、Metasploit渗透框架介绍1.1 名词解释1.2 MSF简介1.3 MSF框架结构1.4 MSF命令汇总1.4.1 常用命令1.4.2 基本命令1.4.3 Exploits模块1.4.4 漏洞名称规则1.5 MSF模块介绍1.5.1 auxiliary(辅助模块)1.5.2 exploits(漏洞利用模块)1.5.3 pay…

Open3D 泊松盘网格采样(Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在图形的许多应用中,特别是在渲染中,从蓝色噪声分布生成样本是很重要的。然而,现有的有效技术不容易推广到二维以外。不过泊松盘采样是个例外,它允许在O(N)时间内生成泊松盘样本,而且该方法很容易在任意维度上…

分布式CAP和BASE理论学习笔记

参考至:https://blog.csdn.net/solihawk/article/details/124442443 1. CAP理论 CAP理论是计算机科学家Eric Brewer在2000年提出的理论猜想,在2002年被证明并成为分布式计算领域公认的定理,其理论的基本观念是,在分布式系统中不…

加密算法 AES和RSA

一,加密(一)加密基础?通过互联网发送数据,数据可能会被第三者恶意窃听,造成损失。因此需要给重要的数据进行加密,加密后的数据被称为“密文”。接收方通过解除加密或得原本的数据,把…

人工智能卷积算法

文章目录前言数字信号处理与卷积运算卷积公式与计算过程边缘卷积计算与0填充NumPy卷积函数二维矩阵卷积计算图像卷积应用实例总结前言 卷积运算实际上是一种常见的数学方法,与加法,乘法等运算类似,都是由两个输入的到一个输出。不同的是&…

迷宫问题---数据结构实践作业

迷宫问题—数据结构实践作业 ✅作者简介:大家好,我是新小白2022,让我们一起学习,共同进步吧🏆 📃个人主页:新小白2022的CSDN博客 🔥系列专栏:算法与数据结构 💖如果觉得博…

什么是HAL库和标准库,区别在哪里?

参考文章https://blog.csdn.net/u012846795/article/details/122227823 参考文章 https://zhuanlan.zhihu.com/p/581798453 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全…

Java 面向对象程序设计 消息、继承与多态实验 课程设计研究报告

代码:Java计算机课程设计面向对象程序设计对战游戏SwingGUI界面-Java文档类资源-CSDN文库 一、课程设计内容 一个游戏中有多种角色(Character),例如:国王(King)、皇后(Queen)、骑士&#xff0…

【Linux多线程】

Linux多线程Linux线程概念什么是线程线程的优点线程的缺点线程异常线程用途Linux进程VS线程进程和线程进程的多个线程共享Linux线程控制POSIX线程库线程创建线程等待线程终止分离线程线程ID及进程地址空间布局Linux线程概念 什么是线程 在一个程序里的一个执行路线就叫做线程…

JavaScript 如何正确的分析报错信息

文章目录前言一、报错类型1.控制台报错2.终端报错二、错误追查总结前言 摸爬滚打了这么长时间…总结了一些排查错误的经验, 总的来说, 这是一篇JavaScript新手向文章. 里面会有些不那么系统性的, 呃, 知识? 一、报错类型 报错信息该怎么看, 怎么根据信息快速的追查错误. 1.…

瑞吉外卖项目

技术选型: 1、JAVA版本:JDK11 2、数据库:mysql5.7 Navicat 3、后端框架:SpringBoot SpringMVC MyBatisPlus 4、工具类:发邮件工具类、生成验证码工具类 5、项目优化:Nginx、Redis、读写分离 项目来…