一、File类
File类是File类是java.io包中唯一处理磁盘文件和目录的类。它提供的方法都是与平台无关的,
通过使用File类提供各种方法能够创建、删除文件和目录,或者获取磁盘上指定的文件和目录的相关信息。
1 package com.tai.io; 2 3 import java.io.File; 4 import java.io.FileFilter; 5 import java.io.IOException; 6 7 public class FileDemo 8 { 9 /** 10 * File类是java.io包中唯一处理磁盘文件和目录的类。它提供的方法都是与平台无关的, 11 * 通过使用File类提供各种方法能够创建、删除文件和目录,或者获取磁盘上指定的文件和目录的相关信息。 12 * @param args 13 * @throws IOException 14 */ 15 public static void main(String[] args) throws IOException 16 { 17 File file = new File("E:/文件夹"); 18 if(file.mkdir()) 19 { 20 System.out.println("文件夹已创建!"); 21 } 22 23 24 File file2 = new File("E:/文件夹/文件.txt"); 25 if(file2.createNewFile()) 26 { 27 System.out.println("文件已经创建!"); 28 } 29 30 getInfor(file2); 31 32 if(file2.delete()) 33 { 34 System.out.println("文件已删除!"); 35 } 36 37 File Dir = new File("C:"+File.separator+"abc");//separator 文件分割符这样写便于代码跨平台,更加健壮! 38 fFilter(Dir); 39 } 40 41 /* 42 *获取相关信息 43 */ 44 private static void getInfor(File file) 45 { 46 System.out.println("文件名"+file.getName()); 47 System.out.println("文件父路径"+file.getParent()); 48 System.out.println("文件的绝对路径"+file.getAbsolutePath()); 49 System.out.println("所在磁盘的大小"+file.getTotalSpace()/(1024*1024*1024)+"GB"); 50 System.out.println("所在磁盘的可用空间"+file.getUsableSpace()/(1024*1024*1024)+"GB"); 51 System.out.println("是否是文件"+file.isFile()); 52 System.out.println("是否是文件夹"+file.isDirectory()); 53 System.out.println("是否是隐藏文件"+file.isHidden()); 54 System.out.println("是否可读"+file.canRead()+" 是否可写"+file.canWrite()+" 是否可执行"+file.canExecute()); 55 } 56 57 /* 58 * FilenameFilter 过滤接口 此处用内部类实现FileFilter的accept()方法 59 * FilenameFilter和FileFilter类似,也提供文件过滤功能 60 * 性能上FilennameFilter较FileFilter效率稍高 61 */ 62 private static void fFilter(File file) 63 { 64 File[] files = file.listFiles(new FileFilter() 65 { 66 @Override 67 public boolean accept(File pathname) 68 { 69 if(pathname.isFile()&&pathname.getName().endsWith(".txt")) 70 { 71 return true; 72 } 73 return false; 74 } 75 }); 76 System.out.println("该目录下的所有文本文件"); 77 for(File f:files) 78 { 79 System.out.println(f.getName()); 80 } 81 } 82 83 }
运行结果:
文件夹已创建! 文件已经创建! 文件名文件.txt 文件父路径E:文件夹 文件的绝对路径E:文件夹文件.txt 所在磁盘的大小84GB 所在磁盘的可用空间31GB 是否是文件true 是否是文件夹false 是否是隐藏文件false 是否可读true 是否可写true 是否可执行true 文件已删除! 该目录下的所有文本文件 b.txt 新建文本文档 (2).txt 新建文本文档.txt
二、字节流
计算机中的数据都是以字节为单位进行处理的,这类的数据保存文件也成为“二进制文本”,在Java中对这些文本的操作就是要使用Java的字节流对象。
InputStream和OutputStream分别是输入与输出字节流,它们都是抽象类型的,都不能实例化,它们在I/O包中的顶层,作为了众多字节流的父类。
Java中的字节流有很多,这是我写的几个常用的字节流Demo.
FileInputStream/FileOutputStream
FileInputStream与FileOutputStream 被称为文件流,是最常见的字节流。用于对磁盘文件的读写操作。
* File类不只能创建、删除、获取文剪信息,但是不能打开和读写文件。FileInputStream与FileOutoutStream就是用于读写文件的
* FileInputStream 的构造方法
* FileInputStream fis = new FileInputStream("c:/abc");
File file = new File("c:/abc");
FileInputStream fis = new FileInputStream(file);
为了简化常用:
FileInputStream fis = new FileInputStream(new File("c:/abc"));
Demo:
1 package com.tai.io; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 8 public class FileInputStreamDemo 9 { 10 /** 11 * FileInputStream与FileOutputStream 被称为文件流,是最常见的字节流。用于对磁盘文件的读写操作。 12 * File类不只能创建、删除、获取文剪信息,但是不能打开和读写文件。FileInputStream与FileOutoutStream就是用于读写文件的 13 * FileInputStream 的构造方法 14 * FileInputStream fis = new FileInputStream("c:/abc"); 15 File file = new File("c:/abc"); 16 FileInputStream fis = new FileInputStream(file); 17 为了简化常用: 18 FileInputStream fis = new FileInputStream(new File("c:/abc")); 19 * @throws IOException 20 */ 21 public static void main(String[] args) throws IOException 22 { 23 FileInputStream fis = new FileInputStream(new File("C:/abc/Demo.txt")); 24 FileInputStream fis2 = new FileInputStream(new File("C:/abc/b.txt")); 25 int b=0,len=0; 26 System.out.println("使用read()方法,每次读一个字节:"); 27 //使用循环,每次读入一个字节,直到文件结尾。 28 while((b=fis.read())!=-1) 29 { 30 System.out.print((char)b); 31 } 32 fis.close(); 33 System.out.println(" 使用read(byte[] b)的方法,读取文件存入字符数组中"); 34 //读取文件,直到结尾,存入byte数组中,打印。 35 byte[] bt = new byte[516]; 36 while(-1!=(len=fis2.read(bt,0,516))) 37 { 38 String str = new String(bt,0,len);////这里需要特别注意的是 从0到len len是实际的长度可能不到516 、 39 System.out.print(str); 40 } 41 fis2.close(); 42 43 } 44 45 46 47 }
运行结果:
使用read()方法,每次读一个字节: this is a FileInputDemo. 使用read(byte[] b)的方法,读取文件存入字符数组中 回家过年,这本是很简单的四个字,却是许许多多游子一年中的期盼,当然,这也包括那些在外求学的莘莘学子们。 在外瓢泼久了,多想回到家乡看看为我们牵挂的父母亲人。曾经多少个日日夜夜想及这些,我们可以做的只是一壶浊酒而后在心底默默的祝福与思念。 “举头望明月,低头思故乡”一年到头,隐藏在我们心底的除了深深的牵挂还剩下什么呢?一年到头,又有多少父母无时无刻不在思念着远方的儿女? 记得还小的时候我们是多么的喜欢过年,有新衣服穿、有压岁钱拿,好多好吃好玩的,还不用担心作业是否已经完成。而今我们盼望着过年,却只是那短暂的团聚,可以陪父母陪亲人说说心里的话。同时我们又多么地害怕,害怕父母那期望的眼神,尤其是害怕看见父母那满头乌发渐渐泛白,甚至脱落。虽然我知道,人没有不会老的,但看见父母脸上渐添的皱纹,和那渐渐泛白的乌发,心中总会有一种心酸的感觉。
FileOutputStream
* FileOutputStream类是用于向磁盘文件写入字符数据的输出类
* 当想磁盘某个文件写入时如果文件不存在它不会向FileInputStream那样抛异常,而是创建一个新的文件。
* 构造方法与FileInputStream类似,但是有的会多个参数:
* FileOutputStream fos = new FileOutputStream(File file,boolean append)
* append 是否想文件尾部追加 true 在该文件的结尾追加内容,flase将清除原有的内容,添加新的内容。
1 package com.tai.io; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 public class FileOutputStreamDemo 10 { 11 /** 12 * 本程序的功能是将一个文本中的内容复制到另一个文本中。 13 * @param args 14 * @throws IOException 15 */ 16 public static void main(String[] args) throws IOException 17 { 18 FileInputStream fis = new FileInputStream(new File("C:/abc/Demo.txt")); 19 FileOutputStream fos = new FileOutputStream(new File("C:/abc/Demo2.txt"),false); 20 int b= 0,len=0; 21 byte[] bt = new byte[512]; 22 23 while(-1!=(len=fis.read(bt,0,512) ) ) 24 { 25 fos.write(bt,0,len); 26 } 27 System.out.println("已经吧Demo.txt中的内容复制到了Demo2.txt中!!"); 28 fos.close(); 29 fis.close(); 30 31 FileOutputStream fos2 = new FileOutputStream(new File("C:/abc/Demo3.txt"),false); 32 writein(fos2,"hello world!"); 33 System.out.println("已经hello world写入到了文件C:/abc/Demo3.txt中"); 34 } 35 36 /* 37 * 简单的向文件写入字符串 38 */ 39 private static void writein(FileOutputStream fos,String str) 40 { 41 byte[] b = str.getBytes(); 42 try 43 { 44 fos.write(b); 45 fos.close(); 46 } 47 catch (IOException e) 48 { 49 // TODO Auto-generated catch block 50 e.printStackTrace(); 51 } 52 53 } 54 }
执行结果:
已经吧Demo.txt中的内容复制到了Demo2.txt中!!
已经hello world写入到了文件C:/abc/Demo3.txt中