在 Java IO实际上很好的体现了Java 的面向对象的设计思想
一个接口或抽象类的具体行为由子类决定,那么根据实例化子类的不同完成的功能也不同
Java IO中的所有操作类都放在java.io 包中
主要的类和接口是:File、InputStream、OutputStream、Reader、Writer、Seralzable 接口
File
File 类在整个java.io 包中是一个独立的类,此类的主要功能是完成与平台无关的文件操作,例如:创建文件、删除文件等等
创建文件
例如,现在要在D盘上创建一个demo.txt的文件
创建文件的方法:public bollean createNewFile() throws Exception
package org.iodemo;
import java.io.File;
import java.io.IOException;
public class IoDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\1.txt");
try{
file.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
}
}
程序本身只是作为一个文件的创建出现,而如果要使用具体的内容的输出,则必须依靠IO操作流。
删除文件
如果要想删除文件则使用:public bollean delete()
package org.iodemo;
import java.io.File;
import java.io.IOException;
public class IoDemo02 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\1.txt");
file.delete();
}
}
以上的两个操作确实完成了文件的创建及删除,可以代码却同样存在问题。
在各个操作系统中,文件的分隔符是不一样的:
windows:\
linux:/
Java 本身属于跨平台的语言,那么应该可以适应各个不同的平台要求。那么为了解决可以自动适应不同系统的分隔符要求,所以在File类中提供了以下几个常量:
路径分隔符: public static final String pathSeparator “;”
分隔符: public static final String separator "\" 或者 "/"
所以,对于实际的开发来讲,必须使用这样的常量进行声明
判断文件是否存在
提供以下的方法:public boolean exists()
package org.iodemo;
import java.io.File;
import java.io.IOException;
public class IoDemo03 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\1.txt");
if (file.exists()){
file.delete();
}else{
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
那么,此时就可以利用此种特点完成以下的一个要求:
要求编写一个程序,此程序的主要功能如下,如果文件存在,则删除,如果文件不存在则创建一个新的文件
判断路径是文件还是文件夹
在程序中可以使用如下的方法进行判断
判断是否是文件夹: public boolean isDirectory()
判断是否是文件:public bollean isFile()
package org.iodemo;
import java.io.File;
public class IoDemo05 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"a.txt");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
}
}
列出目录中的内容
在File 类中提供了以下的两个方法进行目录的列表操作
public String[] list()
public File[] listFiles()
package org.iodemo;
import java.io.File;
public class IoDemo08 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"Download");
String[] files = file.list();
for (int i=0;i<files.length;i++){
System.out.println(files[i]);
}
}
}
此处列出来的只是一个目录下的文件或文件夹名称而已
package org.iodemo;
import java.io.File;
public class IoDemo08 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"Download");
File[] files = file.listFiles();
for (int i=0;i<files.length;i++){
System.out.println(files[i]);
}
}
}
这两个操作都同样属于列表的操作,但是后者却可以列出完整的路径,实际上此时,如果为更加清楚的表示出列出的是路径
package org.iodemo;
import java.io.File;
public class IoDemo08 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"Download");
File[] files = file.listFiles();
for (int i=0;i<files.length;i++){
System.out.println(files[i].getParent()+"-->"+files[i].getPath());
}
}
}
如果要想操作文件,则肯定使用后者最为方便,因为可以找到File类的对象功能
创建目录
使用mkdir()方法即可
package org.iodemo;
import java.io.File;
public class IoDemo06 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\123");
file.mkdir();
}
}
在windows 中有很多文件的后缀,例如:txt、doc、jpg ,实际上这些文件的后缀与文件本身的内容没有任何的关系,加入后缀只是为了方便程序的管理而已
当然,在创建的时候也可以在一个文件夹下创建文件
package org.iodemo;
import java.io.File;
import java.io.IOException;
public class IoDemo09 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D"+File.separator+"Demo"+File.separator+"test.demo");
file.getParentFile().mkdir();
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package org.iodemo;
import java.io.File;
public class IoDemo07 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator);
getFile(file);
}
public static void getFile(File f){
if (f.isDirectory()){
File lists[] = f.listFiles();
if (lists != null){
for (int i=0;i<lists.length;i++){
getFile(lists[i]);
}
}
}
System.out.println(f);
}
}