Java IO实际上很好的体现了java面向对象的设计思想.
一个接口和抽象类的具体行为由子类决定,根据实例化子类的不同完成的功能也不同,java IO所有的操作类都在java.io包中.
主要的类和接口是 File ,InputStream, OutputStream, Reader, Writer, Serializable接口.
尽管java.io定义的大多数类是实行流式操作的,File类不是.它直接处理文件和文件系统.也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性.File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径.此外,File还浏览子目录层次结构.很多程序中文件是数据的根源和目标.尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源.Java中的目录当成File 对待,它具有附加的属性——一个可以被 list( )方法检测的文件名列表.
下面的构造函数可以用来生成File 对象:
File(String directoryPath)
File(String directoryPath, String filename)
File(File dirObj, String filename)
这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象.
例如:
File f1 = new File("/");
File f2 = new File("/","autoexec.bat");
File f3 = new File(f1,"autoexec.bat");
File 定义了很多获取File对象标准属性的方法.例如getName( )返回文件名,getParent( )返回父目录名,exists( )在文件存在的情况下返回true,反之返回false.然而File类是不对称的.说它不对称,意思是虽然存在允许验证一个简单文件对象属性的很多方法,但是没有相应的函数来改变这些属性.
示例 :package com.ares.test; import java.io.File; import java.io.IOException; public class CreatFile { public static void main(String[] args) throws InterruptedException { File file = new File("/home/ares/file.txt"); try { file.createNewFile(); // 创建文件 Thread.sleep(3000); file.delete(); } catch (IOException e) { e.printStackTrace(); } } }
File类提供了几个常量来应对不同平台文件分隔符的不一样.
路径分隔符: public static final String pathSeparator; //”;”
分隔符: public static final String separator; // “/”或者”\”
示例:
package com.ares.test; import java.io.File; import java.io.IOException; public class CreatFile { public static void main(String[] args) throws InterruptedException { File file = new File(File.separator + "home" + File.separator + "ares" + File.separator + "file.txt"); try { file.createNewFile(); // 创建文件 Thread.sleep(3000); if (file.exists()) { file.delete(); } else { System.out.println("File is not exist! "); } } catch (IOException e) { e.printStackTrace(); } } }注 :
判断是文件还是文件夹的方法分别是: isDirectory(),isFile().
列出目录操作: listFiles(),list().
示例:
package com.ares.test; import java.io.File; import java.io.IOException; public class CreatFile { public static void main(String[] args) throws InterruptedException { File file2 = new File(File.separator + "home" + File.separator + "ares"); String a[] = file2.list(); //列出文件名 File[] a2 = file2.listFiles(); //列出文件名还有路径 for (String f : a) { System.out.println(f); } for (File f : a2) { System.out.println(f); } } }
创建文件夹的方法: mkdir()
示例:
File file = new File(File.separator + "home" + File.separator + "ares" + File.separator + "aresxiong" + File.separator + "file.txt"); file.getParentFile().mkdir(); //表示创建aresxiong文件夹,否则在createNewFile时报错.
示例:(列出全部文件)
package com.ares.filedemo; import java.io.File; public class ListDirectoryDemo { public static void main(String[] args) { File file = new File("d:" + File.separator); list(file); } public static void list(File file) { if (file.isDirectory()) { File lists[] = file.listFiles(); if (lists != null) { for (int i = 0; i < lists.length; i++) { list(lists[i]); // 递归调用,列出内容 } } } System.out.println(file); } }
随机读取类,可以随即读取文件中的数据.要想实现随即读取,需要保证数据的一致性,否则无法完成此功能.需要接收一个File 实例,并且指定操作模式.操作模式有读模式,写模式和读写模式.
示例:
package com.ares.randomaccessdemo; import java.io.File; import java.io.RandomAccessFile; public class RandomAccessFileDemo { public static void main(String[] args) throws Exception {// 所有异常抛出 File file = new File("d:" + File.separator + "demo.txt");// 指定要操作的文件 RandomAccessFile raf = new RandomAccessFile(file, "rw");// 以读写的形式进行操作 // 写入第一条数据 String name = "zhangsan";// 表示姓名 int age = 30; // 表示年龄 raf.writeBytes(name); // 以字节的方式将字符串写入 raf.writeInt(age); // 写入整型数据 // 写入第二条数据 name = "lisi ";// 表示姓名 age = 31; // 表示年龄 raf.writeBytes(name); // 以字节的方式将字符串写入 raf.writeInt(age); // 写入整型数据 // 写入第三条数据 name = "wangwu ";// 表示姓名 age = 32; // 表示年龄 raf.writeBytes(name); // 以字节的方式将字符串写入 raf.writeInt(age); // 写入整型数据 raf.close();// 文件操作的最后一定要关闭 } }
示例:
package com.ares.randomaccessdemo; import java.io.File; import java.io.RandomAccessFile; public class RandomAccessFileDemo { public static void main(String[] args) throws Exception {// 所有异常抛出 File file = new File("d:" + File.separator + "demo.txt");// 指定要操作的文件 RandomAccessFile raf = new RandomAccessFile(file, "r");// 以读的形式进行操作 byte b[] = null;// 定义字节数组 String name = null; int age = 0; b = new byte[8]; raf.skipBytes(12); // 跨过第一个人的信息 System.out.println("第二个人的信息:"); for (int i = 0; i < 8; i++) { b[i] = raf.readByte(); // 读取字节 } age = raf.readInt();// 读取数字 System.out.println("\t|- 姓名:" + new String(b)); System.out.println("\t|- 年龄:" + age); raf.seek(0);// 回到开始位置 System.out.println("第一个人的信息:"); for (int i = 0; i < 8; i++) { b[i] = raf.readByte(); // 读取字节 } age = raf.readInt();// 读取数字 System.out.println("\t|- 姓名:" + new String(b)); System.out.println("\t|- 年龄:" + age); raf.skipBytes(12); // 跨过第二个人的信息 System.out.println("第三个人的信息:"); for (int i = 0; i < 8; i++) { b[i] = raf.readByte(); // 读取字节 } age = raf.readInt();// 读取数字 System.out.println("\t|- 姓名:" + new String(b)); System.out.println("\t|- 年龄:" + age); raf.close();// 文件操作的最后一定要关闭 } }
delete( ) 可以在目录为空时删除目录.如果删除了文件,delete( )返回true,如果文件不能被删除则返回false.Java 2 为File 类增添了一些新的方法,你会发现在某些场合这些新增方法很有用.
一些最有趣的方法显示如下:
void deleteOnExit( ) 在java虚拟机终止时删除与调用对象相关的文件
boolean isHidden( ) 如果调用的文件是隐藏的,返回true;否则返回 false.
boolean setLastModified(long millisec) 设置由millisec指定的调用文件的时间标志,Millisec是从1970年1月1号开始的标准时间(UTC)的毫秒数
boolean setReadOnly( ) 设置调用文件为只读
并且,因为File 类现在支持Comparable 接口,compareTo( )方法也被支持.
参考:
http://blog.csdn.net/shichexixi/article/details/5563605
20150504
JAVA学习笔记系列
--------------------------------------------
联系方式
--------------------------------------------
Weibo: ARESXIONG
E-Mail: [email protected]
------------------------------------------------