**
IO流。文件的上传和下载。
**
IO:(Input Output Stream)
File文件类,只能对文件本身操作,不能对文件中的内容进行操作。
public File(String pathname);构造方法。
boolean createNewFile() throws IOException; 创建新的文件。
boolean mkdir() 创建目录
boolean mkdirs() 创建多层目录
boolean delete():删除文件或目录
boolean exists():判断文件或目录是否存在。
boolean isFile(): 判断是否为文件
boolean isDirectory():判断是否为目录
String[] list(): 列出指定目录下所有的文件或文件夹的名称。
File[] listFile(): 列出指定目录下所有文件或目录对象。
String getName():得到文件或目录的名称
String getPath():得到文件或目录的相对路径.
String getAbsolutePath():得到文件或目录的绝对路径
编写一个方法查询一个目录下的所有文件。 用递归调用。
import java.io.File;
public class demo2 {
public static void main(String[] args) {
File f=new File("D:\\练习"); //声明查询哪个文件下的路径
fun(f); //调用方法
}
public static void fun(File file) {
if(file.isFile()) { //是否是文件
System.out.println("该文件的绝对路径为"+file.getAbsolutePath()); //输出文件
}else {
File[] files=file.listFiles(); //查询该目录下的文件或是子目录
for(File f:files) { //遍历该目录
fun(f); //递归调用
}
}
}
}
1.上面的File类只能对文件进行操作,不能对文件中的内容进行操作。
(1)使用IO流来对文件中的内容进行操作。都是站在程序的角度。
①根据流的方法分为:
1)输入流
2)输出流
②根据读取的单位:
1)字节流
2)字符流
2.字符输入流(Reader)和字符输出流(Writer)。两个类都是抽象类,该类无法实例化对象,用其子类FileReader创建对象。
(1)FileReader构造函数
①FileReader(File file);
②FileReader(String path)…
(2)应用,两种方式
①
File file=new File("D:\\hhz\\1\\11\\123.txt");
FileReader fr=new FileReader(file);
char[] c=new char[6];
int i=fr.read(c);
while(i!=-1) {
String str=new String(c,0,i);
System.out.println(str);
i=fr.read(c);
}
②
File file=new File("D:\\hhz\\1\\11\\123.txt");
FileReader fr=new FileReader(file);
int a=fr.read();
while(a!=-1) {
char ch=(char)a;
System.out.print(ch);
a=fr.read();
}
(3) FileWriter
(4) 应用
①
File file=new File("D://a.txt");
FileWriter fw=new FileWriter(file,true); //没有自动会建。 true:是否运行追加
String str="I am fine\n";
fw.write(str); //
//fw.flush();//刷新FileWrite中内容。写不写都行
fw.close();
3.想图片视频压缩文件读写(doc,jpg,ppt…)都是字节文件。
4.字节流:
(1)InputStream和OutputStream这两个类为字节输入和输出的父类。这两个类也是抽象类。这两个类也是抽象类。这两个类不能创建对象,需要使用
(2)应用(类似字符输入流)
① 1
FileOutputStream:字节输出
File file=new File("D://d.txt");
FileOutputStream fos=new FileOutputStream(file,true); //字节输出流
String str="你好!How are you";
byte[] b=str.getBytes(); //把str转化为字节数组
fos.write(b) ;//write(byte[] b)
fos.close();
②
FileInputStream:字节输入流
File file=new File("D://d.txt");
FileInputStream fis=new FileInputStream(file);
byte[] bytes=new byte[10];
int i= fis.read(bytes);
while(i!=-1){
String str=new String(bytes,0,i);
System.out.println(str);
i=fis.read(bytes);
}
fis.close();
处理流:以上的四个流都对应一个处理流。
BufferedWriter:字符输出的处理流
BufferedWriter(Writer out) :这是它的构造方法。
FileWriter fw=new FileWriter("D://c.txt");
BufferedWriter bw=new BufferedWriter(fw,true); //升级。
bw.write("Hello Word");
bw.flush();
bw.newLine(); //产生换行,可以应用于任何系统。
bw.close();
BufferedReader:字符输入的处理流 。
Reader r=new FileReader("笔记.txt");
BufferedReader br=new BufferedReader(r);
String line=br.readLine();// 可以读取一行。
while(line!=null){
System.out.println(line);
line=br.readLine();
}
br.close();
复制功能:
1.BufferedOutputStream:字节输出流的缓存流。
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("D://e.txt"));
String str="Hello Good";
byte[] bytes=str.getBytes();
bos.write(bytes);
bos.close();
2.BufferedInputStream:字节输入流的缓存流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D://e.txt"));
byte[] b=new byte[20];
int i= bis.read(b);
while(i!=-1){
String str=new String(b,0,i);
System.out.println(str);
i= bis.read(b);
}
bis.close();
对象流: 通过该流可以把Java中的对象进行保存(文件,云盘,网络上)。
- ObjectInputStream
- OjbectOutputSteam
序列化(Serialize): 用ObjectOutputStream类将一个Java对象通过IO流写入到数据源中
public static void main(String[] args) throws Exception
{
OutputStream os=new FileOutputStream("D://a.txt");
ObjectOutputStream oos=new ObjectOutputStream(os);
//注意:该类People 必须实现Serializable接口。
// 该类中所有要序列化的属性的类型必须也实现Serializable接口
People p=new People("张三",19);
oos.writeObject(p); //把一个对象通过ObjectOutputStream写入到数据源
oos.close();
os.close();
}
class People implements Serializable
{
private String name;
private int age; //Integer
private Student stu;
public void setStu(Student stu){
this.stu=stu;
}
public Student getStu(){
return stu;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “People2 [name=” + name + “, age=” + age + “]”;
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
public People() {
super();
}
}
class Student extends People
{
}
反序列化(Deserialize):用ObjectInputStream类从数据源中恢复该Java对象。
public static void main(String[] args) throws Exception
{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D://a.txt"));
Object o=ois.readObject(); //获取该文件中的对象
People p=(People)o; //向下转型
System.out.println(p.getName()+"=====>"+p.getAge()+"----->");//toString();
ois.close();
}