IO流(2)
2015-08-27 16:37
441 查看
一、File类
1、定义:来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作,File对象可以作为参数传递给流的构造函数。2、File类的常见方法:
(1)、创建
boolean creatNewFile();在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
static File createTempFile(String prefix,String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static File createTempFile(String prefix,String suffix,File directory)在指定文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。和输出流不一样,输出流对象一建立创建文件,而且文件已经存在,会覆盖
boolean mkdir();创建文件夹
boolean mkdirs();创建多级文件夹
(2)、删除
boolean delete():删除失败返回false
void deleteOnExit();在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。在程序退出时删除指定文件
(3)、判断
boolean compareTo(File pathname)按字母顺序比较两个抽象路径名。
boolean exists():文件是否存在
isfile();测试此抽象路径名表示的文件是否是一个标准文件。
isDirectory();测试此抽象路径名表示的文件是否是一个目录
isHidden();/测试此文件是否是一个隐藏文件。
isAbsolute();测试此抽象路径名是否为绝对路径名。
(4)、获取信息
getName();获取名称
getPath()将此抽象路径名转换为一个路径名字符串。
getParent();返回此抽象路径名父目录的路径名字符串,如果此路径名没有指定父目录,则返回null.
getParentFile()返回此抽象路径名父目录的抽象路径名,如果此路径名没有指定父目录,则返回null.
getAbsolutePath();返回的是绝对路径名字符串
getAbsoluteFile();返回绝对路径名形式
long length()返回由此抽象路径名表示的文件的长度。
long lastModified() 返回最后一次被修改的时间。
代码演示:
import java.io.*; public class FileDemo { public static void main(String[] args) throws IOException { method_2(); method_1(); consMethod(); } public static void method_5()throws IOException { File f=new File("c:\\text.java"); File f1=new File("d:\\haha.java"); System.out.println("rename:"+f.renameTo(f1));//将f的名称换成f1的。 } public static void method_4()throws IOException { File f=new File("d:\\abc\\file1.txt"); System.out.println("path:"+f.getPath());//封装什么就是什么 System.out.println("abspath"+f.getAbsolutePath());//不论是什么都是绝对的。 System.out.println("parent"+f.getParent());//该方法返回的是绝对路径中的父目录,如果获取的是相当路径,返回的是null //如果相对路径中有上一层目录,那么该目录返回结果。 } public static void method_3() throws IOException { File f=new File("file.txt"); //f.createNewFile();结果是文件是真,目录是假 f.mkdir();//结果是目录是真,文件是假。 //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在 //通过exists判断 System.out.println("dir:"+f.isDirectory()); System.out.println("file:"+f.isFile()); System.out.println(f.isAbsolute());//绝对路径的判断 } public static void method_2() { File f=new File("file.txt"); //System.out.println("exists:"+f.exists()); //创建文件夹 File dir=new File("abc\\kkk"); System.out.println("mkdir:"+dir.mkdir()); //System.out.println("execute"+f.canExecute());测试应用程序是否可以执行此抽象路径名表示的文件。 } public static void method_1() throws IOException { File f=new File("file.txt"); f.deleteOnExit(); //code(); System.out.println("creat:"+f.createNewFile()); System.out.println("delete:"+f.delete()); } //创建File对象 public static void consMethod() { //将a.txt封装File对象,可以将已有的和未出现的文件或者文件夹封装成对象 File f1=new File("a.txt"); // File f2=new File("c:\\abc"/*指定的父目录*/,"b.txt"); File d=new File("c:\\abc");/*封装目录*/ File f3=new File(d,"c.txt"); System.out.println("f1:"+f1); System.out.println("f2:"+f2); System.out.println("f3:"+f3); File f4=new File("c:"+File.separator/*\\目录分隔符*/+"abc\\zzz\\a.txt"); } }
二、递归
1、定义:当函数内每一次循环还可以调用本功能来实现,也就是函数自身调用自身。这种表现形式,或者编程手法,称为递归。2、递归注意事项
(1)、限定条件。是来结束循环调用,否则是死循环。
(2)、注意递归的次数,尽量避免内存溢出。因为每次调用自身的时候都会先执行下一次调用自己的方法,所以会不断在栈内存中开辟新空间,次数过多,会导致内存溢出。
3、案例:删除一个带内容的目录
import java.io.*; class RemoveDir { public static void main(String[] args) { //指定目录 File dir=new File("e:\\1"); //删除目录 removeDir(dir); } //删除传入目录 public static void removeDir(File dir) { File[] files=dir.listFiles();//列出目录下的所以文件和文件夹 //遍历 for (File file : files ) { //如果还是目录且非隐藏 if(!file.isHidden()&&file.isDirectory()) removeDir(file);//继续删除目录里的内容 else System.out.println(file.toString()+":-file-:"+file.delete());//删除文件 } System.out.println(dir+":::dir:::"+dir.delete());//删除目录 } }
三、打印流
1、打印流包括:PrintStream和PrintWriter。该流提供了打印方法,可将各种类型的数据都原样打印。2、字节打印流:PrintStream,其构造方法中可接收的参数类型:
(1)、File对象。File
(2)、字符串路径:String
(3)、字符输出流:OutputStream
3、字符串打印流:PrintWriter,其构造方法中可接受的参数类型:
(1)、File对象:File
(2)、字符串路径:String
(3)、字节输出流:OutputStream
(4)、字符输出流:Writer
4、案例:把键盘输入的数据保存到文件中
import java.io.*; class PrintStreamDemo { public static void main(String[] args) throws IOException { //键盘录入 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //打印流关联文件,自动刷新 PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true); String line = null; while((line=bufr.readLine())!=null) { if("over".equals(line))//结束字符 break; out.println(line.toUpperCase()); //out.flush(); } //关流 out.close(); bufr.close(); } }
四、小结
对于我来说,IO流算是java中比较难的部分。所有的类大部分都是成对出现的,字符流能完成的功能字节流全部都能完成,基本的操作方法基本一致。File类对文件的操作不会创建文件,流对文件的操作都会创建文件。相关文章推荐
- Java IO流详解
- 8 个不得不说的 MySQL 陷阱
- c#调用微信接口获取token值
- plsql与64位的Oracle关联方法
- HTTP请求的header头解析
- C# 用spreadsheet打开excel文件
- fingerprint recognition 指纹识别工程记录
- Percona XtraBackup User Manual 阅读笔记
- LoadRunner脚本中的乱码问题以及解决办法
- Host绑定
- Collabtive系统CSRF攻击实验
- Spring学习(六)spring整合注解形式的hibernate
- L6:Map、HashMap、遍历的两种方式
- git本地使用以及与github、git@osc账户联合使用
- C#将datatable导出到excel
- 深入理解PHP原理之Opcodes
- POJ 1584 A Round Peg in a Ground Hole(凸包判定,多边形计算与判定)
- 安装Matlab JPEG Toolbox
- 如何让一部全新的 MacBook 快速完成开发环境配置
- hash table