java中的文件流File

数据 + 流(转)操作

IO
I表示的是:输入Input
O表示的是:Output
Stream表示流转
java中的管道不止一个。并且管道有可能不是一样的。
有的管道粗有的管道细

java中的文件流File
java中的文件流File

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:javaprojiectgoodStudyjavaStudy.testhello.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:javaprojiectgoodStudyjavaStudy.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);                 }             }         }     } } 

java中的文件流File

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

通过上面的图片我们发现只复制了一个字母,为啥只复制了一个呢?
我们读取文件的时候 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中的文件流File

文件复制-使用管道-提升效率

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;          // 缓冲输入流         BufferedInputStream bis = null;         // 缓冲输出流         BufferedOutputStream bos = null;         // 缓冲区(水桶)每次存多少         byte[] cache = new byte[1024];         try {             // 可能会有异常,需要使用try-catch             fis = new FileInputStream(srcFile);             fos = new FileOutputStream(srcCopy);              // 缓冲区的管道 创建输入流和输出流             bis = new BufferedInputStream(fis);             bos = new BufferedOutputStream(fos);             int srcData =-1; //            while((srcData=fis.read())!=-1){ //                fos.write(srcData); //            }             // 现在我们更改读取的方式,使用缓冲来读取             while((srcData=bis.read(cache))!=-1){                 // 读取                 bos.write(cache, 0, srcData);             }         } catch (IOException e) {             // 这里使用             throw new RuntimeException(e);         } finally {             if(bis != null){                 // bis.close 可能也会存在异常,因此也需要给新增上try-catch                 // 之前我们关闭的是文件输入流fis.close。现在我们关闭的是管道的输入流                 try {                     bis.close();                 } catch (IOException e) {                     throw new RuntimeException(e);                 }             }             if(bos != null){                 // bos.close 可能也会存在异常,因此也需要给新增上try-catch                 // 之前我们关闭的是文件输出流fos.close。现在我们关闭的是管道的输出流                 try {                     bos.close();                 } catch (IOException e) {                     throw new RuntimeException(e);                 }             }         }     } } 

java中的文件流File

尾声
准备开始学习java了。
今天学习的第六天,每天都会发文章,我要卷起来。
请小伙伴们监督我,奥利给

发表评论

评论已关闭。

相关文章