File类
File类是java.io包中很重要的一个类
File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录
File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等
File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作
构造方法摘要
方法原型 | 说明 |
---|---|
File(File parent, String child) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 |
File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 |
File(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 |
File(URI uri) | 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例 |
//在当前目录下创建一个与aaa.txt文件名相关联的文件对象
File f1 = new File("aaa.txt");
//指明详细的路径以及文件名,请注意双斜线或用反斜杠
File f2 = new File("D:\\Java\\Hello.java");
//指明详细的路径以及目录名,请注意双斜线
File f3 = new File("D:\\Java");
常用方法
list() | 将目录下的子目录及文件的名字,返回到String数组中 |
---|---|
listFiles() | 将目录下的子目录及文件的实例返回到File数组中 |
isFile() | 判断是否为文件,是文件返回true,否则返回false |
isDirectory() | 判断是否为目录,是目录返回true,否则返回false |
getName() | 获得文件的名称 |
length() | 获得文件的长度(字节数) |
createNewFile () throws IOException | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件 |
delete() | 删除此抽象路径名表示的文件或目录 |
toString() | 返回此抽象路径名的路径名字符串 |
输入输出
把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作
从程序往外部设备写数据,称为输出,即output,进行数据的write操作
输入流与输出流
- 流按输出的传输方向分为:
输入流:往程序中读叫输入流
输出流:从程序中往外写叫输出流
- 所有输入流都是InputStream类或者Reader类的子类
类名以InputStream结尾的类都是InputStream的子类。
类名以Reader结尾的类都是Reader类的子类
- 所有输出流都是OutputStream类或者Writer类的子类
类名以OutputStream结尾的类都是OutputStream的子类。
类名以Writer结尾的类都是Writer类的子类
字节流与字符流
-
从数据流编码格式上划分为:字节流和字符流
-
InputStream和OutputStream的子类都是字节流(可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节)
-
Reader和Writer的子类都是字符流
——主要处理字符或字符串,字符流处理单元为2个字节
——字节流将读取到的字节数据,去指定的编码表中获取对应文字
字节流常用类:字节输入流 FileInputStream
字节输出流 FileOutputStream
字符流常用类:字符输入流 FileReader
字符输出流 FileWriter
节点流与处理流
根据封装类型不同流又分为:节点流与处理流
节点流:
如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。
处理流:
如果流封装的是其它流对象,称为处理流。
处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法。
节点流常用类
字节输入流 FileInputStream
字节输出流 FileOutputStream
字符输入流 FileReader
字符输出流 FileWriter
处理流常用类
缓冲字节输出流 BufferedOutputStream
缓冲字节输入流 BufferedInputStream
缓冲字符输入流 BufferedReader
缓冲字符输出流 BufferedWriter
Print流
**Print 打印流:**只做输出没有输入, 打印流分为字节打印流和字符打印流
**PrintWriter:**字符打印流,print方法可以打印各种类型数据
PrintWriter特点:
- 可以打印各种数据类型
- 可以做字符流和字节流的转换
- 可以直接向文件中写入数据
public class PrintWriterDemo {
public static void main(String[] args) throws FileNotFoundException {
PrintWriter out = new PrintWriter("E:\\demo.dat");
//从服务器端 向 客户端 浏览器打印输出网页内容
out.println(3);
out.print("adsasdas");
out.print("adsasdas");
out.print("adsasdas");
out.close();
}
}
对象序列化
Java 的对象序列化将那些实现了 Serializable 接口的对象转换成一个字节序列(因此,只能使用 Stream 相关类进行操作),并能够在以后将这个字节序列完全恢复为原来的对象。只要对象实现了 Serializable 接口(该接口仅是一个标记接口,并不包括任何方法),对象序列化和反序列化通过以下两步实现:
- 创建 OutputStream 对象,封装在 ObjectOutputStream 对象中,只需调用 writerObject 即可将对象序列化
- 创建 InputStream 对象,封装在 ObjectInputStream 对象中,只需调用 readObject 即可将对象序列化
public class ObjectOutPutDemo {
public static void main(String[] args) throws IOException {
FileOutputStream out=new FileOutputStream("E:\\Object.txt");
ObjectOutputStream object=new ObjectOutputStream(out);
Date date=new Date();
String str="hello";
object.writeObject(str);
object.writeObject(date);
object.writeObject(new User("jim","3523525"));
object.close();
}
}
public class ObjectInPutDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream in=new FileInputStream("E:\\Object.txt");
ObjectInputStream object=new ObjectInputStream(in);
String str=(String) object.readObject();//按照序列化的顺序反序列化
Date date=(Date) object.readObject();
User user=(User)object.readObject();
System.out.println(user);
System.out.println("str="+str);
System.out.println("data="+date);
}
}
public class User implements Serializable {
private String name;
private String password;
private int age;
public User(){
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
以上三个程序就是将对象序列化以及反序列化输出的表示结果