IO流

**

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中的对象进行保存(文件,云盘,网络上)。

  1. ObjectInputStream
  2. 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();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值