Java上路18-I/O-File
2012-12-03 11:25
246 查看
一. File:
File对象可以表示文件或者目录,利用它可对文件或目录的属性进行基本操作。也可以查询文件的基本信息,并进行修改。
1. 例子:
![](http://img.my.csdn.net/uploads/201212/03/1354504265_5571.PNG)
2. 层级列表:
![](http://img.my.csdn.net/uploads/201212/03/1354504265_6511.PNG)
3. 删除文件及文件夹:
从执行的结果来看,Demo或demo都可以被删除。
![](http://img.my.csdn.net/uploads/201212/03/1354504265_3584.PNG)
4. 提取所有的java文件名单到txt文件:
![](http://img.my.csdn.net/uploads/201212/03/1354504265_1244.PNG)
二. Properties:
java.util.Properties,可将数据保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。可与IO结合的集合容器。
![](http://img.my.csdn.net/uploads/201212/03/1354504282_8145.PNG)
例子:
限制使用次数:
![](http://img.my.csdn.net/uploads/201212/03/1354504282_9232.PNG)
三. 其它常用IO类:
SequenceInputStream:合并流
PrintWriter:打印流
File对象可以表示文件或者目录,利用它可对文件或目录的属性进行基本操作。也可以查询文件的基本信息,并进行修改。
构造函数 | File file = new File (“ Demo.txt ”) ; | 在默认目录创建文件 |
File file = new File (“ C : \\”,“ Demo.txt ”) ; | 以字符串形式,在指定目录创建文件 | |
File file = new File ( File,“ Demo.txt ”) ; | 以文件形式,在指定目录创建文件 | |
| 常用方法 | 描述 |
增 | file. createNewFile() ; | 创建声明的文件 |
file.mkdir() ; | 创建声明的目录 | |
删 | file.delete() ; | 删除文件或目录 |
file.deleteOnExit() ; | 程序结束后删除 | |
改 | renameTo() ; | 重命名 |
setReadOnly() ; | 设置只读 | |
查 | file.exists ( ) ; | 判断文件或目录是否存在 |
file.isFile ( ) ; | 判断是否是文件 | |
file.isDirectory ( ) ; | 判断是否是目录 | |
file.getName ( ) ; | 获取文件或目录的名称 | |
file.getPath ( ) ; | 获取文件或目录的路径 | |
file.getAbsolutePath ( ) ; | 获取文件或目录的绝对路径 | |
file.lastModified ( ) ; | 获取文件或目录的最后修改日期 | |
file.length ( ) ; | 获取文件或目录的大小(字节) |
1. 例子:
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Date; class FileDemo { public static void main(String[] args) throws IOException { File file1=new File("Demo.txt"); //创建文件操作器 file1.createNewFile(); test("file1is a file : "+file1.isFile()); //判断是否为文件 test("thename of file1 is : "+file1.getName()); //查询文件名 file1.renameTo(new File("MyDemo.txt")); //重命名 test("thenew name of file1 is : "+file1.getName()+ ". File 类的实例是不可变的;一旦创建,File对象表示的抽象路径名将永不改变"); File file2=new File("Demo.java"); file2.createNewFile(); test("\nfile2is a directory :"+file2.isDirectory ()); //判断是否为文件夹 File file3=new File("Demo"); //创建目录 file3.mkdir(); test("\nfile3is a exist : "+file3.exists()); //判断是否存在 test("file3is a directory :"+file3.isDirectory()); File file4=new File("file.txt"); FileWriter fw=new FileWriter("file.txt"); BufferedWriter bw=new BufferedWriter(fw); bw.write("thisis a file."); bw.flush(); fw.close(); test("\nthelength of file4 is : "+file4.length()+" byte"); //判断大小 test("thepath of file4 is : "+file4.getPath()); //获取路径 test("theabsolute path of file4 is : "+file4.getAbsolutePath()); //获取绝对路径 Date date=new Date(file4.lastModified()); test("thelast modified of file4 is : "+date); //获取最后编辑时间 String txtfile="new file.txt"; File file5=new File("c:\\", txtfile); file5.createNewFile(); test("\nfile5is a exist : "+file5.exists()); //判断是否为文件夹 file5.delete(); //删除文件 File file6=new File(file3, "new demo.java"); file6.createNewFile(); test("\nfile6is a exist : "+file6.exists()); //判断是否为文件夹 file6.deleteOnExit(); } publicstatic void test(Object obj) { System.out.println(obj); } }
2. 层级列表:
方法 | 说明 |
list ( ) ; | 返回全部的文件夹和文件(不包括子目录)的名称数组 |
list (FilenameFilter filter ) ; | 返回指定类型的文件 |
listFiles ( ) ; | 返回全部的文件夹和文件(不包括子目录)的对象数组 |
listFiles ( FilenameFilter filter ) ; | 返回指定类型的对象 |
import java.io.File; import java.io.FilenameFilter; class FileDemo { public static void main(String[] args) { /* File[] files=File.listRoots(); //获取所有盘符-驱动器 for(File f:files) { test(f); } File file=new File("e:/javatest"); String[] names=file.list(); //获取所有文件及目录的名称 for(String s:names) { test(s); } */ //filter(); File dir=new File("e:/javatest"); dir(dir); } publicstatic void dir(File dir) { test("\n目录:"+dir); File[] files=dir.listFiles(); for(int x=0; x<files.length; x++) { if(files[x].isDirectory()) { dir(files[x]); //递归,查询子目录 } else { test(files[x]); } } } /* 递归: 务必有终止条件 合理设置执行次数 */ public static void filter() { File file=new File("e:/javatest"); String[] names=file.list( //匿名内部类 new FilenameFilter() { //此时两个参数是自动装入的 public boolean accept(File dir, String name) { return name.endsWith(".txt"); //只返回封装目录下的txt文件 } } ); //获取指定文件对象 for(String s:names) { test(s); } } public static void test(Object obj) { System.out.println(obj); } }
3. 删除文件及文件夹:
import java.io.File; class FileDemo { public static void main(String[] args) { File dir=newFile("e:/javatest/demo"); removeDir(dir); } public static void removeDir(File dir) { File[] files=dir.listFiles(); for(int x=0; x<files.length; x++) { if(files[x].isDirectory()) { removeDir(files[x]); } else { System.out.println(files[x].toString()+"--file--"+files[x].delete()); } } System.out.println(dir+"--dir--"+dir.delete()+"\n"); } public static void test(Object obj) { System.out.println(obj); } }
从执行的结果来看,Demo或demo都可以被删除。
4. 提取所有的java文件名单到txt文件:
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; class FileDemo { public static void main(String[] args) throws IOException { File dir=new File("e:/javatest"); List<File> list=new ArrayList<File>(); fileToList(dir,list); //提取java文件到集合 File file=new File(dir, "javatest.txt"); writeToFile(list,file.toString()); //将集合内容保存到文本文件 } public static void writeToFile(List<File> list, String javaListFile) throws IOException { BufferedWriter bufw=null; try { bufw=new BufferedWriter(new FileWriter(javaListFile)); for(File f:list) { String path=f.getAbsolutePath(); bufw.write(path); bufw.newLine(); bufw.flush(); } } catch(IOException e) { throwe; } finally { try { if(bufw!=null) { bufw.close(); } } catch(IOException e) { throwe; } } } public static void fileToList(File dir, List<File> list) { File[] files=dir.listFiles(); for(File file:files) { if(file.isDirectory()) { fileToList(file,list); } else { if(file.getName().endsWith(".java")) { list.add(file); } } } } }
二. Properties:
java.util.Properties,可将数据保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。可与IO结合的集合容器。
| 方法 | 说明 |
查 | getProperty(String key) | 用指定的键在此属性列表中搜索属性 |
load(InputStream inStream) | 从输入流中读取键和元素对 | |
list(PrintStream out) | 将属性列表输出到指定的输出流 | |
stringPropertyNames() | 返回此属性列表中的键集 | |
改 | setProperty(String key, String value) | 调用 Hashtable 的put方法 |
store(OutputStream out, String comments) | 将此 Properties 表中的属性列表(键和元素对)写入输出流 |
import java.io.*; import java.util.*; class FileDemo { public static void main(String[] args) throws IOException { //File file=new File("info.txt"); //file.createNewFile(); //creat(); //创建集合对象,写入文本文件 //gets(); //查询(文本文件内容全部是有效的) load(); //使用Properties的已有方法查询 } public static void load() throws IOException { Properties prop=new Properties(); FileInputStream fis=new FileInputStream("info.txt"); prop.load(fis); //加载字符流 prop.list(System.out); } public static void gets() throws IOException { BufferedReader bufr=new BufferedReader(new FileReader("info.txt")); String line=null; Properties prop=new Properties(); while((line=bufr.readLine())!=null) { String[] arr=line.split("="); prop.setProperty(arr[0],arr[1]); } bufr.close(); System.out.println(prop); } public static void creat() throws IOException { Properties prop=new Properties(); prop.setProperty("wangwu","39"); //插入键值对 prop.setProperty("wangliu","35"); prop.setProperty("wangqi","49"); //prop.setProperty("wangwu","50"); //覆盖已有的键 FileOutputStream fos=new FileOutputStream("info.txt"); prop.store(fos,"this is a tab"); //将此 Properties 表中的属性列表(键和元素对)写入输出字符 //prop.list(System.out); //在控制台打印 fos.close(); // 关闭前自动flush } }
例子:
限制使用次数:
import java.io.*; import java.util.*; class FileDemo { public static void main(String[] args) throws IOException { Properties prop=new Properties(); File file=new File("count.ini"); if(!file.exists()) { file.createNewFile(); } FileInputStream fis=new FileInputStream(file); //读 prop.load(fis); intcount=0; String value=prop.getProperty("time"); //读取键值 if(value!=null) { count=Integer.parseInt(value); if(count>=5) { System.out.println("拿钱来!"); return; } } count++; //将读取的键值递增后重新写入 prop.setProperty("time",count+""); FileOutputStreamfos=new FileOutputStream(file); prop.store(fos,""); fos.close(); fis.close(); } }
三. 其它常用IO类:
SequenceInputStream:合并流
PrintWriter:打印流
import java.io.*; import java.util.*; class FileDemo { public static void main(String[] args) throws IOException { //cut(); //拆分mp3文件 //merge(); //合并mp3 //sequenceInputStreamDemo(); //合并流(文本文件) printWriterDemo(); //打印流 } public static void cut() throws IOException { FileInputStream fis=new FileInputStream("demo.mp3"); //字节读取流,封装图片文件 FileOutputStream fos=null; //字节写入流 byte[] buf=new byte[1024*1024]; //1M大的字节数组 int len=0; int count=1; //读取1m大的量的字节存入buf,同时存入len while ((len=fis.read(buf))!=-1) { fos=new FileOutputStream((count++)+".tmp"); //字节写入流封装一个新的tmp文件 fos.write(buf, 0, len); //写入刚才的数据(数据,位置,长度) fos.close(); //刷新缓冲区写入文件,然后关闭 } fis.close(); } public static void merge() throws IOException { ArrayList<FileInputStream> al=new ArrayList<FileInputStream> (); for (int x=1; x<=3; x++) { al.add(new FileInputStream(x+".tmp")); //将3个tmp文件存入集合 } finalIterator<FileInputStream> it=al.iterator(); //迭代 Enumeration<FileInputStream> en=new Enumeration<FileInputStream> () //枚举 { public booleanhasMoreElements() { return it.hasNext(); } public FileInputStreamnextElement() { return it.next(); } }; SequenceInputStream sis=new SequenceInputStream(en); //合并流 FileOutputStream fos=new FileOutputStream("new demo.mp3"); byte[] buf=new byte[1024]; int len=0; while ((len=sis.read(buf))!=-1) { fos.write(buf, 0, len); } fos.close(); sis.close(); } public static void sequenceInputStreamDemo() throws IOException { Vector<FileInputStream> v=new Vector<FileInputStream> (); v.add(new FileInputStream("1.txt")); v.add(new FileInputStream("2.txt")); v.add(new FileInputStream("3.txt")); Enumeration<FileInputStream> en=v.elements(); //枚举,配合输入流使用 SequenceInputStream sis=new SequenceInputStream(en); //合并流 FileOutputStream fos=new FileOutputStream("4.txt"); byte[] buf=new byte[1024]; int len=0; while ((len=sis.read(buf))!=-1) { fos.write(buf, 0, len); } fos.close(); sis.close(); } public static void printWriterDemo ()throws IOException { BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); PrintWriter out=new PrintWriter(System.out, true); //打印流,自动刷新 String line=null; while((line=bufr.readLine())!=null) { if("over".equals(line)) { break; } out.println(line.toUpperCase()); //out.flush(); //已经启动自动刷新缓冲区 } out.close(); bufr.close(); } }
相关文章推荐
- 【Java学习笔记】18.Java 流(Stream)、文件(File)和IO
- Java_io体系之FileWriter、FileReader简介、走进源码及示例——18
- Java_18 File类
- Java 日看一类(18)之IO包中的FileNameFilter接口类和FileNotFoundException异常类
- 使用 hdfs dfs -put 报错 org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /test/a.txt._C
- 18、Java入门—Java IO流之对象的序列化和反序列化
- How To Create XML File In Java – (DOM Parser)
- 关于Java的File.separator
- java.nio.file中的Paths类
- 使用java.io.File的renameTo方法移动文件失败的问题
- [Java 12 IO] PrintStream 打印流 new PrintStream(new FileOutputStream(new File("/home。。
- java基础------>File--->扫描功能
- 慎用java的File#renameTo(File)方法
- java cxf nested exception is java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-ex
- Java:File类:文件夹与文件的查询
- java基础18io流
- java FileWriter and FileReader
- java I/O类 File使用
- java 获取用户目录、工程根目、加载file的方式