数据 + 流(转)操作

IO

I表示的是:输入Input

O表示的是:Output

Stream表示流转

java中的管道不止一个。并且管道有可能不是一样的。

有的管道粗有的管道细



File的常用方法

文件/目录信息
isFile()判断是否是一个文件,返回是一个布尔值,true表示文件。false不是文件
isDirectory()判断是否是一个目录(文件夹),true表示文件夹。false不是文件夹
exists()判断文件或目录是否存在,true表示存在,false表示不存在 getName()获取文件或目录的名称(不包括路径)。
getPath()获取文件或目录的相对路径
getAbsolutePath()获取文件或目录的绝对路径
length()获取文件的大小(字节数)
lastModified()获取文件或目录的最后修改时间(返回毫秒数) 文件/目录操作:
createNewFile() 创建一个新的空文件(如果文件已存在则返回 false),目录必须要存在,否则会出现异常。
mkdir() 创建单级目录(如果父目录不存在则失败)。
mkdirs()创建多级目录(包括所有必要的父目录),如果没有父级目录,也会给你创建
delete()删除文件或空目录(如果删除成功返回 true)。
renameTo(File dest) 将文件或目录重命名或移动到目标路径。 目录内容
list()返回目录中的文件和子目录的名称数组(String[])。
listFiles()返回目录中的文件和子目录的 File 对象数组(File[])。
list(FilenameFilter filter)返回符合过滤条件的文件和子目录的名称数组。
listFiles(FileFilter filter)返回符合过滤条件的文件和子目录的 File 对象数组。
判断当前的file对象是否是文件 File.isFile()
package part;

import java.io.File;

public class Java01 {
public static void main(String[] args) {
// 创建file对象,它的参数可以是文件路径,也可以是文件夹的路径
File file = new File("./04.md");
// 判断当前的file对象是否是文件,返回的是布尔值。true是文件,false不是文件
System.out.println(file.isFile()); // true
}
}

new File(url)的路径问题

new File(url)中url可以是一个文件路径,也可以是目录路径。

当然也可以是一个不存在的路径

因此我们的 File 可能是一个文件或者文件夹或者不存在的对象

是否是一个文件夹 File.isDirectory

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test");
// 是否是一个文件夹
if(srcFile.isDirectory()){
System.out.println("Directory");
}
}
}

判断这个文件对象是否存在 srcFile.exists()

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test");
// 判断文件或目录是否存在,返回来的是一个布尔值
if(srcFile.exists()){
System.out.println("存在这个对象");
}else{
System.out.println("不存在这个对象");
}
}
}

创建目录 File.mkdirs(),如果没有父级目录,也会给你创建

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./testqq/213123");
// 文件对象是否存在
if(!srcFile.exists()){
//如果文件对象不存在的话,我会创建一个目录
// 如果我的项目中没有这个目录,他会创建一个这样的多级目录的哈
srcFile.mkdirs();
}
}
}

创建文件 File.createNewFile

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象,如果/testqq/213123不存在的话,就会出现异常的哈
File srcFile =new File("./testqq/213123/xuexie.txt");
try {
// 创建一个新文件,可能会有异常的哈,因此使用try-catch进行捕获
// 创建的目录必须要存在,否则会出现异常。
srcFile.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

获取文件的基本信息:名称-对路径-最后修改的时间-大小(字节)

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test/hello.txt");
// 文件的名称 hello.txt
System.out.println(srcFile.getName());
// 文件的绝对路径 D:\javaprojiect\goodStudy\javaStudy\.\test\hello.txt
System.out.println(srcFile.getAbsolutePath());
// 文件最后修改的时间,时间戳 1738681949390
System.out.println(srcFile.lastModified());
// 文件的大小 22
System.out.println(srcFile.length());
}
}

获取文件夹的相关信息:名称-绝对路径-最后修改时间

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test");
// 文件夹的名称 test
System.out.println(srcFile.getName());
// 文件夹的绝对路径 D:\javaprojiect\goodStudy\javaStudy\.\test
System.out.println(srcFile.getAbsolutePath());
// 文件夹最后修改的时间,时间戳 1738681949390
System.out.println(srcFile.lastModified());
}
}

复制文件-为啥只复制了一个字母(文字)

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test/hello.txt");
// 数据目的的文件对象(自动生成)
File srcCopy =new File("./test/helloCpy.txt");
if(srcFile.exists()){
System.out.println("File exists");
}
// 文件输入流(管道对象)
FileInputStream fis = null;
// 文件输出流(管道对象)
FileOutputStream fos = null;
try {
// 可能会有异常,需要使用try-catch
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(srcCopy);
// 打开阀门,开始读取数据了哈(输出),这里也会产生异常的,使用 IOException
int srcData = fis.read();
// 打开阀门,开始写入数据了哈(写入)
fos.write(srcData);
} catch (IOException e) {
// 这里使用
throw new RuntimeException(e);
} finally {
if(fis != null){
// fis.close 可能也会存在异常,因此也需要给新增上try-catch
try {
fis.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if(fos != null){
// fos.close 可能也会存在异常,因此也需要给新增上try-catch
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}

为啥只复制了一个字母(文字)

通过上面的图片我们发现只复制了一个字母,为啥只复制了一个呢?

我们读取文件的时候 int srcData = fis.read();没有判断是否已经读取完。

就开始写入 fos.write(srcData);

如果我们还没有读完就开始写入的话。

这样就会产生一个问题: 就只会复制文件的一个字母(文字)。

因此我们需要判断文件是否已经全部读取完了。

文件读取的值是-1表示的是什么意思

如果文件数据已经读取完了,再去读取数据,读取的数据值是: -1, 表示已经读取完了。

复制文件

package part;

import java.io.*;

public class Java01 {
public static void main(String[] args) {
// 数据源文件对象
File srcFile =new File("./test/hello.txt");
// 数据目的的文件对象(自动生成)
File srcCopy =new File("./test/helloCpy.txt");
if(srcFile.exists()){
System.out.println("File exists");
}
// 文件输入流(管道对象)
FileInputStream fis = null;
// 文件输出流(管道对象)
FileOutputStream fos = null;
try {
// 可能会有异常,需要使用try-catch
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(srcCopy);
// // 打开阀门,开始读取数据了哈(输出),这里也会产生异常的,使用 IOException
// int srcData = fis.read();
// // 打开阀门,开始写入数据了哈(写入)
// fos.write(srcData);
int srcData =-1;
// 如果读取的值是-1,说明已经读取完了。我们给他关闭掉
while((srcData=fis.read())!=-1){
fos.write(srcData);
}
} catch (IOException e) {
// 这里使用
throw new RuntimeException(e);
} finally {
if(fis != null){
// fis.close 可能也会存在异常,因此也需要给新增上try-catch
try {
fis.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if(fos != null){
// fos.close 可能也会存在异常,因此也需要给新增上try-catch
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}

尾声

准备开始学习java了。

今天学习的第六天,每天都会发文章,我要卷起来。

请小伙伴们监督我,奥利给

java中的文件流File的更多相关文章

  1. java中打开文件流后要关闭后重新打开

    记录错误,打开文件流一定要关闭并重新打开文件流,不然取的文件内容永远是第一次取的文件内容: /** * 读取配置文件 */ private Properties readProperties() { ...

  2. 3,Java中的文件IO流

    1,File类 ··· 概念:File对象可以表示一个文件或目录.可以对其进行增删改查. ··· 常用方法:     File f = new File(".");     判断是 ...

  3. java中的IO流之文件复制

    O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两 ...

  4. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  5. Java中的IO流总结

    Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和Buffe ...

  6. Java中的IO流,Input和Output的用法,字节流和字符流的区别

    Java中的IO流:就是内存与设备之间的输入和输出操作就成为IO操作,也就是IO流.内存中的数据持久化到设备上-------->输出(Output).把 硬盘上的数据读取到内存中,这种操作 成为 ...

  7. Java中的IO流(五)

    上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream ...

  8. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  9. Java中的IO流(四)

    上一篇<Java中的IO流(三)>把IO流中的文件及目录操作的对象File类记录了一下,本篇把本不属性IO流但又和IO流有关系的一个对象作一下记录,此对象本属于集合框架里的一个子集,即Pr ...

  10. Java中的IO流(三)

    上一篇<Java中的IO流(二)>把学习Java的字符流以及转换流作了一下记录,从本篇开始将把IO流中对文件或文件夹操作的对象File类的学习进行一下记录. 一,File类的构造函数及字段 ...

随机推荐

  1. Linux之定时任务crontab

    一.cron.d增加定时任务 当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab.但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的. 例如,增加一 ...

  2. 系统日志查询之journalctl

    journalctl是什么 查询系统日志的工具 journalctl -xe是什么意思 -xe是排查问题时最常用的参数:-e 从结尾开始看-x 相关目录(如:问题相关的网址) journalctl - ...

  3. Elasticsearch之权限验证(Basic)

    目前使用的Es版本为7.5版本, 在7.X版本中已经可以免费的使用x-pack进行用户验证了 1. 修改elasticsearch主节点配置文件: action.destructive_require ...

  4. JavaScript 页面缓存

    1.前言 由来:默认环境中,当浏览器重复访问一个资源时,为节省资源与性能,浏览器将其缓存,后续的请求不再从服务器下载该资源,而是直接从本地缓存中读取,默认时没有强制缓存的 副作用:当服务器资源更新时, ...

  5. FileSaver 文件导出

    1.前言 本节主要讲述如何将后台返回的JSON以文件的形式保存到本地 官方文档 兼容性(转载) Browser Constructs as Filenames Max Blob Size Depend ...

  6. vue中this.$nextTick()

    this.$nextTick()是在下一次DOM更新后执行其指定回调函数 this.$nextTick(回调函数) 使用场景:在改变数据后,要对更新后的DOM进行操作时使用

  7. taro 编译报:模块引入顺序不一致报错

    前情 最近在开发一个小程序项目,基于公司的技术栈是React,于是使用Taro来开发小程序. 坑位 在开发中经常性的报类似如下的错误,大致意思是说你引入模块的顺序在不同模块中不一致 Why? 主要是m ...

  8. 【第2章】matlab程序设计基础

    matlab语言的常量与变量 matlab语言的变量命名规则 由一个字母引导,后面可以为其他字符. 区分大小写 如Abc ≠ ABc matlab的保留常量 以下为系统保留常量,自己定义的变量不能与他 ...

  9. 无法加载文件 C:\Users\admin\AppData\Roaming\npm\anyproxy.ps1

    无法加载文件 C:\Users\admin\AppData\Roaming\npm\anyproxy.ps1 我们右击开始菜单,以管理员身份打开power shell 运行命令: set-Execut ...

  10. Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

    一.前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,一 ...