【Java】文件操作

1 File类的静态成员遍历

字段摘要
static String pathSeparator与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar与系统有关的路径分隔符。
static String separator与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。
static char separatorChar与系统有关的默认名称分隔符。

路径分割符:Windows:分号 Linux:冒号
文件名称分割符:Windows:\反斜杠 Linux:/正斜杠
注意:操作路径不能写死,应该使用File.separator来连接

2 绝对路径和相对路径

绝对路径:以盘符开始的完整路径
相对路径:相对于当前项目的根目录
C:\files\file.txt —> file.txt
路径不区分大小写
反斜杠是转义符 两个反斜杠表示一个反斜杠

3 File类的构造方法

public static void constructMethod() {File file = new File("C://test.txt");System.out.println(file);//重写了Object类的toString方法 打印文件路径 路径可以不真实存在File file2 = new File("C:","a.txt");//父子路径单独书写 变化灵活System.out.println(file2);File file3 = new File("c:\\");//第一个参数的类型是File类而不是StringFile file4 = new File(file3,"a.txt");System.out.println(file4);}

4 常用方法

获取

  1. getAbsolutePath
  2. getPath
  3. getName
  4. length:文件长度
public static void method() {File f1 = new File("a.txt");//相对路径String absolutePath = f1.getAbsolutePath();System.out.println(absolutePath);//打印绝对路径String path = f1.getPath();System.out.println(path);//打印路径参数 a.txtSystem.out.println(f1.toString());//toString源码调用的就是getPath()File f2 = new File("E:\\download\\learn\\a.txt");File f3 = new File("a.txt");File f4 = new File("E:\\download\\learn");//getName打印结尾部分 文件名/文件夹名System.out.println(f2.getName());//a.txtSystem.out.println(f3.getName());//a.txt 文件名System.out.println(f4.getName());//learn 文件夹名//length返回的是文件长度 //获取构造方法指定的文件的大小 单位为byte//文件不存在返回0 文件夹没有大小概念 也是0System.out.println(f2.length());}

判断

  1. exists():路径是否存在
  2. isDirectory():file对象是否是文件夹,路径不存在返回false
  3. isFile():file对象是否是文件,路径不存在返回false
public static void method() {File f1 = new File("a.txt");//相对路径System.out.println(f1.exists());File f2 = new File("E:\\download\\learn");System.out.print(f1.isFile());System.out.println(" " + f1.isDirectory());//true falseSystem.out.print(f2.isDirectory());System.out.println(" " + f2.isFile());//true false}

创建和删除

  1. createNewFile():当该名称的文件不存在的时候,创建一个空文件,返回true。若文件存在,不创建返回false。此方法只能创建文件,不能创建文件夹。路径必须存在,否则会抛出异常。【调用该方法会抛出IO异常 要么throws 要么try-catch】
  2. delete():删除file表示的文件或目录,谨慎使用,直接在硬盘删除文件/文件夹,不走回收站。注意:如果文件夹中有东西,则不会删除成功,返回false。如果路径不存在,返回false。
public static void method() throws IOException {File f1 = new File("a.txt");//相对路径 存在boolean b1 = f1.createNewFile();System.out.println(b1);// falseFile f2 = new File("b.txt");//不存在 创建返回trueboolean b2 = f2.createNewFile();System.out.println(b2);// trueFile f3 = new File("F://none");//路径不存在System.out.println(f3.createNewFile());//报错:系统找不到指定的路径}
  1. mkdir():创建file表示的目录
  2. mkdirs():创建file表示的目录 包括必须但不存在的父级目录
public static void method() throws IOException {File f1 = new File("E:\\download\\newlearn");//新文件夹boolean mkdir1 = f1.mkdir();System.out.println(mkdir1);//trueFile f2 = new File("E:\\download\\learn");//已存在文件夹boolean mkdir2 = f2.mkdir();System.out.println(mkdir2);//falseFile f3 = new File("E:\\download\\newlearn\\learn\\learn");System.out.println(f3.mkdir());// false不能创建多级目录System.out.println(f3.mkdirs());// true 可以创建多级目录File f4 = new File("F:\\download");//路径不存在System.out.println(f4.mkdir());// false}

遍历目录

  1. String[] list()
  2. File[] listFile()

注意
如果路径不存在,会报空指针异常。
如果路径不是目录,也会报空指针异常。
可以遍历到隐藏文件夹。

public static void method() throws IOException {File f1 = new File("E:\\download\\learn\\");String[] list = f1.list();for(String i: list){//相对路径System.out.println(i);}File[] list = f1.listFiles();for(File i: list){//绝对路径System.out.println(i);}}

5 案例:递归打印多级目录

public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){System.out.println(file);}}

打印结果:显示不全 没有子文件夹 2里面还有3和4

E:\download\1\2
E:\download\1\2.doc
E:\download\1\2.txt

解决方法:如果遇到文件夹,则递归调用getAllFiles()

public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){if(file.isDirectory()){getAllFiles(file);}System.out.println(file);}}

E:\download\1\2\3\4.txt
E:\download\1\2\3
E:\download\1\2\3.pptx
E:\download\1\2\3.txt
E:\download\1\2
E:\download\1\2.docx
E:\download\1\2.txt

6 案例:文件搜索

只要txt文件,其他的不需要。

public class FileTest {public static void main(String[] args) {File dir = new File("E:\\download\\1");getAllFiles(dir);}public static void getAllFiles(File dir){File[] files = dir.listFiles();for(File file: files){if(file.isDirectory()){getAllFiles(file);}else {if(file.toString().endsWith(".txt")){System.out.println(file);}}}}
}

7 文件过滤器

File类中有两个listFiles的重载方法,参数类型是过滤器

java.io.fileFilter接口 用于抽象路径名的过滤器,抽象方法accept(File pathname)

java.io.fileNameFilter接口 用于过滤文件名称,抽象方法accept(File dir, String name)
文件对象用这个构造方法 —> File(dir, name)

需要自己写实现类,重写抽象方法,自定义过滤规则

listFiles对目录进行遍历,获取文件和文件夹并封装为File对象
然后调用accept方法 讲File对象传递到accept的参数
如果返回值是false就会保存到数组中

public static void getAllFiles(File dir){File[] files = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {if (pathname.isDirectory()){return true;}return pathname.toString().endsWith("txt");}});for(File file: files){if(file.isDirectory()){getAllFiles(file);}else {System.out.println(file);}}}

输出:

E:\download\1\2\3\4.txt
E:\download\1\2\3.txt
E:\download\1\2.txt

Lambda简化

File[] files=dir.listFiles((pathname)-> pathname.isDirectory()||pathname.getName().endsWith(".txt"));

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

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

相关文章

他与她,一个两年前的故事

“ 有没有那个Ta,值得你一生去守护”1她能力出众,业务能力无人能出其左右;他资质平庸,扮演一个很不起眼的角色;她国色天香,是整个公司上上下下关注的焦点;他其貌不扬,甚至很多人根本…

科普 | 知识图谱相关的名词解释

知识图谱(Knowledge Graph)是谷歌于2012年提出。企业通常出于商业目的去设计新的概念和名词。但每一个概念的提出都有其历史渊源和本质内涵。下面列举了知识图谱相关的几个概念,并简要阐明了它们与知识图谱的关系和区别。Knowledge Base&…

系统性能衡量维度、指标

一、性能问题简介 应用性能是产品用户体验的基石,性能优化的终极目标是优化用户体验。当我们谈及性能,最直观能想到的一个词是“快”,Strangeloop在对众多的网站做性能分析之后得出了一个著名的3s定律“页面加载速度超过3s,57%的访…

搜索引擎核心技术与算法 —— 倒排索引初体验

今天开启一个新篇章——智能搜索与NLP。本篇章将由羸弱菜鸡小Q和大家一同学习与智能搜索相关的知识和技术,希望能和大家一同学习与进步,冲鸭!!这里首先区分两个概念:搜索和检索检索:数据库时代的概念&#…

【Java】第一阶段练习题

字符串 判断引用类型的地址而不是值当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查。 如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回。否则新的字符串对象被创建,然后将这个引用放入字符串常量…

微服务设计原则和解决方案

一、微服务架构演进过程 近年来我们大家都体会到了互联网、移动互联带来的好处,作为IT从业者,在生活中时刻感受互联网好处的同时,在工作中可能感受的却是来自自互联网的一些压力,那就是我们传统企业的IT建设也是迫切需要转型&…

技术动态 | 知识可视化,连接和探究知识之间的联系!

本文转载自公众号:东湖大数据交易中心。大数据百人会线上沙龙 第八期3月1日晚八点,大数据百人会沙龙第八期主讲嘉宾——北京知珠传媒科技有限公司CEO郝庆一先生,分享他对可视化的理解,以及连接知识、探究知识之间的关系。1可视化…

潜在语义分析原理以及python实现代码!!!!

在Wiki上看到的LSA的详细介绍,感觉挺好的,遂翻译过来,有翻译不对之处还望指教。 原文地址:http://en.wikipedia.org/wiki/Latent_semantic_analysis 前言 浅层语义分析(LSA)是一种自然语言处理中用到的方法…

史上最可爱的关系抽取指南?从一条规则到十个开源项目

正文来自订阅号:AINLP正文作者:太子長琴(NLP算法工程师)小夕,我来给你出个题,看看你的反应如何?好呀好呀,你说~“梁启超有一个著名的儿子,叫梁思成;同时还有一个著名的学…

【LeetCode】分类刷题 之 栈和队列

STL 栈&#xff1a;std::stack<int> S; S.top() S.empty() S.push(x) S.pop() S.size() 队列&#xff1a;std:queue<int> Q; Q.empty()、Q.front()、Q.back()、Q.pop()、Q.push()、Q.size() 题225 用队列实现栈 用时&#xff1a;0ms 100% 内存 7MB 100% class My…

论文浅尝 | Leveraging Knowledge Bases in LSTMs

Yang, B., Mitchell, T., 2017. Leveraging Knowledge Bases in LSTMs for Improving Machine Reading. Association for Computational Linguistics, pp. 1436–1446.链接&#xff1a;http://www.aclweb.org/anthology/P/P17/P17-1132.pdf这篇论文是今年发表在 ACL 的一篇文章…

支付系统-对账系统

在支付系统中&#xff0c;资金对账在对账中心进行&#xff0c;将系统保存的账务流水与银行返回的清算流水和清算文件进行对账&#xff0c;核对系统账务数据与银行清算数据的一致性&#xff0c;保证支付机构各备付金银行账户每日的预计发生额与实际发生额一致。 一、清算对账系…

python数据分析与机器学习(Numpy,Pandas,Matplotlib)

机器学习怎么学&#xff1f; 机器学习包含数学原理推导和实际应用技巧&#xff0c;所以需要清楚算法的推导过程和如何应用。深度学习是机器学习中神经网络算法的延伸&#xff0c;在计算机视觉和自然语言处理中应用更厉害一些。自己从头开始做笔记。 机器学习怎么动手&#xff0…

在线GPU分布式实验环境+企业级项目,轻松斩获offer

人工智能微专业招生简章&#xff08;春季&#xff09;重构专业核心培养复合型人才与斯坦福、伯克利、MIT、清华Top10名校同学成为校友一对一学习与职业规划扫码立刻加入本季招生名额仅剩200人

【Java】关于Java中的各种流

1 IO流 1.1 概念 input:输入&#xff08;读取&#xff09;-----> 流:数据(字节/字符) -----> output:输出&#xff08;写入&#xff09; 输入&#xff1a;把硬盘中的数据&#xff0c;读取到内存中使用 输出&#xff1a;把内存中的数据&#xff0c;写入到硬盘中保存 内存…

支付系统-系统架构

本文主要是从支付架构、支付流程分析、支付核心逻辑、支付基础服务、支付安全五个方面来详细讲述支付系统架构 &#xff08;1&#xff09;、架构的定义&#xff1a;架构一定是基于业务功能来展开的&#xff0c;主要是制定技术规范、框架&#xff0c;指导系统落地&#xff1b;好…

领域应用 | 智能导购?你只看到了阿里知识图谱冰山一角

在刚刚结束的2017第四届世界互联网大会上&#xff0c;评选出了年度18项代表性的领先科技成果&#xff0c;阿里云ET大脑就是其中之一。众所周知&#xff0c;融合了先进的大数据、人工智能技术的阿里云ET大脑已经在智慧城市、智慧交通等众多领域得到了应用和推广。但你知不知道&a…

美团技术团队-大众点评搜索基于知识图谱的深度学习排序实践

美团技术团队博客网址&#xff1a;https://tech.meituan.com/2019/02/28/root-clause-analysis.html 1. 引言挑战与思路搜索是大众点评App上用户进行信息查找的最大入口&#xff0c;是连接用户和信息的重要纽带。而用户搜索的方式和场景非常多样&#xff0c;并且由于对接业务种…

NLP、炼丹技巧和基础理论文章索引

玩家你好 恭喜你捡到了一个来自上古时期的*七*星*炼*丹*炉*&#xff0c;只见炉壁上镶嵌着自然语言处理、推荐系统、信息检索、深度炼丹、机器学习、数学与基础算法等失传已久的江湖秘术。熔炉中虽然已有一层厚厚尘土&#xff0c;却依然掩盖不住尘埃下那一颗颗躁动不安的仙丹。 …