文件
常见的文件操作
方式一
public static void main(String[] args) {
File newFile2 = new File("d:\\news2.txt"); //一个 \ 为转义字符
try {
newFile2.createNewFile(); //会抛出一个异常 ,返回值是一个布尔值
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
注意这里的File对象,只是一个对象,只有在执行createNewFile方法,才会真正创建文件。
方式二
public static void main(String[] args) {
File newFile1 = new File("d:\\","news2.txt"); //注意不能写成d,可以写成d:/
try {
newFile1.createNewFile(); //会抛出一个异常
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
方式三(不常用)
public static void main(String[] args) {
File file = new File("d:\\");
File newFile3 = new File(file,"news3.txt");
try {
newFile3.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
其它常用方法
public static void main(String[] args) {
File file = new File("d:\\news1.txt");
System.out.println(file.getName()); //获取文件名 news1.txt
System.out.println(file.getParent()); //文件父级目录 d:\
System.out.println(file.length()); // 文件大小(字节)
System.out.println(file.exists()); // 文件是否存在 (因为上面已经创建所以为T)
System.out.println(file.isFile()); // 是不是一个文件 T
System.out.println(file.isDirectory()); //是不是一个目录 F
}
删除
public static void main(String[] args) {
File file = new File("d:\\news1.txt");
if(!file.exists()){
System.out.println("d:\\nes1.txt");
}else{
if(file.delete()){ // delete删除文件
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
}
}
创建一级目录
public static void main(String[] args) {
// 注意在Java里目录(文件夹)也算是文件
File file = new File("d:\\demo02");
if(file.exists()){
System.out.println("文件夹存在");
}else{
file.mkdir(); //创建单极目录,当然mkdirs也行
}
}
创建多级目录
public static void main(String[] args) {
// 注意在Java里目录(文件夹)也算是文件
File file = new File("d:\\demo02\\demo03");
if(file.exists()){
System.out.println("文件夹存在");
}else{
file.mkdirs(); //创建多级目录
}
}
IO流
原理
注:1. Java的IO流总共涉及40多个类,实际上非常规则,都是从上面的四个抽象基类派生的。
2. 由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。
流与文件的类似关系:
类图
InputStream
OutStream
Reader
Writer
节点流和处理流
节点流图解
包装流图解
对包装流的模拟
class BufferReader_{ //这个就是个包装类
private Reader_ reader_; //包装了一个Reader_类型的属性
public Test(Reader_ reader_) {
this.reader_ = reader_;
} //构造器
public static void main(String[] args) {
BufferReader_ test = new BufferReader_(new StringReader_());
//根据多态可以传入各种 节点流
test.reader_.readString(); //调用相关方法
}
}
abstract class Reader_{
public void readFile(){}
public void readString(){}
} //定义抽象类,后面在调用时,用动态绑定机制
class FileReader_ extends Reader_{ //文件读取类
@Override
public void readFile(){
System.out.println("对文件进行读取");
}
}
class StringReader_ extends Reader_{ //字符串读取类
@Override
public void readString() {
System.out.println("对字符串进行读取");
}
}
也可以在 BufferReader_中 添加各种读取方法:
public void readFiles(int num){
for(int i=0;i<num;i++){
reader_.readFile();
}
}