目录
ObjectStream
一、File
一个File类的对象,可以表示计算机硬盘上一个具体的文件或目录(文件夹)
通过File类的对象 来获取文件/目录的相关信息(例如创建时间,是否可写......)
但是不能读取文件中的内容
File类是java.io包中很重要的一个类;
File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代 表一个文件或目录;
File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件 大小等;
File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作
1.常用方法:
package com.ffyc.javaIO.file;
import java.io.File;
import java.util.Date;
public class FileDemo1 {
public static void main(String[] args) {
File f=new File("E:/a.txt");
File f1=new File("E:/a");//表示E盘中的a文件夹
System.out.println(f.canWrite());//返回文件是否可以写入
System.out.println(f.exists());//文件或目录是否存在
System.out.println(f.getAbsoluteFile());//获取文件绝对地址
System.out.println(f.isHidden());//返回文件或目录是否是隐藏模式
System.out.println(f.isDirectory());//判断是否是目录
System.out.println(f.isFile());//判断是否是文件
System.out.println(f.lastModified());//返回文件最后一次修改时间
System.out.println(new Date(1695976471749L));//把long类型的时间 转换为Date对象
System.out.println(f.getName());//获取文件名
System.out.println(f.length());//获取到的是文件的字节数 一个英文字母占一个字节,在utf-8编码表中一个汉字需要3个字节
}
}
package com.ffyc.javaIO.file;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo2 {
public static void main(String[] args) throws IOException {
/*File f=new File("E:/aa");
if(!f.exists()){
boolean res=f.createNewFile();//创建文件
System.out.println(res);
}
System.out.println(f.delete());//删除文件*/
File f=new File("E:/aa/bb/cc");
//f.mkdir();//只能创建单级目录
//f.mkdirs();//创建多级目录
f.delete();//也是可以删除文件夹的,但是要求文件夹中没有其他内容
}
}
package com.ffyc.javaIO.file;
import java.io.File;
import java.io.IOException;
public class FileDemo3 {
public static void main(String[] args) throws IOException {
File f = new File("E:/a");
/*String[]strings=f.list();//获取到指定目录下一级所有文件/目录的名字(string)
for(String s:strings){
System.out.println(s);
}*/
File[] files = f.listFiles();
for (File file : files) {
if (file.isDirectory()) {
Delete(f);
}else {
file.delete();
}
}
}
public static void Delete(File f) {
if (f.isDirectory()) {
File[] files = f.listFiles();
for (File file : files) {
Delete(file);
}
}else{
f.delete();
}
}
}
二、Stream
创建一个输入流对象
package com.ffyc.javaIO.stream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo1 {
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in =new FileInputStream("E:/a.txt");
FileOutputStream out=new FileOutputStream("E:/b.txt");//输出流会自动创建文件
/*System.out.println(in.read());//97 每read一次 返回一个字节编码
System.out.println(in.read());//98
System.out.println(in.read());//99
System.out.println(in.read());//100
System.out.println(in.read());//-1 当文件内容读完了以后,返回-1*/
int t=0;
while((t=in.read())!=-1){
System.out.println(t);
out.write(t);
}
//关闭流对文件的占用
in.close();
out.close();
}
}
package com.ffyc.javaIO.stream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo2 {
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in =new FileInputStream("E:/baidu.jpg");
FileOutputStream out=new FileOutputStream("E:/baidu1.jpg");//输出流会自动创建文件
int t=0;
while((t=in.read())!=-1){
System.out.println(t);
out.write(t);
}
//关闭流对文件的占用
in.close();
out.close();
}
}
package com.ffyc.javaIO.stream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo3 {
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in =new FileInputStream("E:/baidu.jpg");
FileOutputStream out=new FileOutputStream("E:/baidu1.jpg");//输出流会自动创建文件
/*
int read() 默认一次读一个字节,返回的是读到的字节编码 效率低.
int read(byte[] b) 默认一次读一个指定大小的byte数组个字节,返回的是数组中一次实际装入的字节个数
两个方法相同之处都是读完后返回-1;
*/
byte[]bytes=new byte[100];
int size=0;
int i=0;
while((size=in.read(bytes))!=-1){
i++;
out.write(bytes, 0, size);
}
//关闭流对文件的占用
in.close();
out.close();
}
}
package com.ffyc.javaIO.stream;
import java.io.*;
public class StreamDemo4 {
public static void main(String[] args) throws IOException {
//创建一个输入流对象
FileInputStream in=new FileInputStream("E:/baidu.jpg");//节点流,直接包含文件(数据)
BufferedInputStream bin=new BufferedInputStream(in);//处理流--带缓冲功能的流
FileOutputStream out=new FileOutputStream("E:/baidu1.jpg");
BufferedOutputStream bout=new BufferedOutputStream(out);
byte[]bytes=new byte[1024];
int size=0;
while ((size=bin.read(bytes))!=-1){
bout.write(bytes,0,size);
}
bin.close();
bout.flush();//刷新缓冲区
bout.close();
}
}
package com.ffyc.javaIO.stream;
import java.io.*;
public class StreamDemo5 {
public static void main(String[] args) throws IOException {
//数据输入输出流
String s="你好";
FileOutputStream out=new FileOutputStream("");
/*
out.write(s.getBytes());//实际向外发送时,需要转为byte数组
*/
DataOutputStream dout=new DataOutputStream(out);
dout.writeUTF(s);//将宁符串直接写出。 但是底层转为字节数组
FileInputStream in=new FileInputStream("");
/*byte[]bytes=new byte[100];
int size=in.read(bytes);//对方接收到之后,拿到的也是byte数组
String str=new String(bytes, 0, size);*/
DataInputStream din=new DataInputStream(in);
String str=din.readUTF();//直接可以读到一个宁符串, 在底层将读到宁节数组转为字符串
System.out.println(str);
}
}
ObjectStream
对象输入输出流: 有时候,需要将运行中的对象信息持久保存起来,因为对象在内存中,程序如果终止,对象信息就不存在了. 将对象信息输出到文件的过程,成为对象的序列化,使用ObjectOutputStream完成(处理流). 将对象信息从文件中输入到java程序的过程,成为对象反序列化,使用的ObjectInputStream 对象的反序列化,会在内存中重新城建新的对象保存数据,所以,也是java中创建对象的一种方式.
package com.ffyc.javaIO;
import java.io.*;
import java.util.Date;
public class ObjectStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*String s=new String("abc");
Date date=new Date();
FileOutputStream out=new FileOutputStream("E:/obj.txt");
ObjectOutputStream outputStream=new ObjectOutputStream(out);
outputStream.writeObject(s);
outputStream.writeObject(date);
outputStream.flush();
outputStream.close();*/
FileInputStream in=new FileInputStream("E:/obj.txt");
ObjectInputStream objectInputStream=new ObjectInputStream(in);
String s=(String) objectInputStream.readObject();
Date date=(Date)objectInputStream.readObject();
System.out.println(s);
System.out.println(date);
objectInputStream.close();
}
}
package com.ffyc.javaIO;
import java.io.*;
import java.util.Date;
public class ObjectStream1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*
当我们把一个类的对象用输出流向外输出时,更求这个类必须要实现序列化接口,
否则会报错, java.io.NotSerializableException: com.ffyc.javaIo.User
*/
/*User user = new User("132465", "654321");
FileOutputStream out = new FileOutputStream("E:/a.txt");
ObjectOutputStream outputStream = new ObjectOutputStream(out);
outputStream.writeObject(user);
outputStream.flush();
outputStream.close();*/
FileInputStream in = new FileInputStream("E:/a.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(in);
User s = (User) objectInputStream.readObject();
System.out.println(s);
objectInputStream.close();
}
}