IO复习

来源:互联网 发布:amd游戏优化档案 编辑:程序博客网 时间:2024/05/18 00:23

总介

  i是input 输入  读,o是output  写

使用IO流中的输入流和输出流,对文件或者文件夹进行读和写,(使用buffer缓冲流可以提高流的读写的性能)

1.递归

递归其实就是方法调用方法本身自己。

例如文件夹里有文件夹,文件夹里套了文件,就可以用递归来做到读出里面的文件目录

代码如下:

package com.zking.io;
import java.io.File;

public class TestDiGui {

public static void main(String[] args){

File f=new File("C:\\Users\\Administrator\\Desktop\\a");

read(f);

}

public static void read(File f){

if(f.isDirectory()){

//列出该文件夹下的所有文件

File files[]=f.listFiles();

if(files.length>0){

//判断有子目录或者子文件

for(File file :files){

if(file.isDirectory()){
read(file);
}else{
System.out.println(file.getAbsolutePath());
}

}

}else{

//没有子目录或者子文件

System.out.println(f.getAbsolutePath());

}

}else{

System.out.println(f.getAbsolutePath());

}

}

}

2.本地文件复制

一种是得到一个文件,读完文件,再把这个文件写到另一个地方

另一种就是用jar包进行

3.多线程下载

顾名思义就是使用多个线程进行文件下载,这种方法可以提高下载的速度

原理:

服务器端

(1)

文件的大小:fileSize       线程数量 :threadSize

singleThreadNum

(2)计算每个线程下载的大小:

单个线程下载的大小:singleThreadNum的公式就是:如果     fileSize % threadSize==0

那么singleThreadNum=fileSize/threadSize     否则就是          singleThreadNum=fileSize/threadSize+1

(假如文件大小为10,有三个线程,那么每个线程下载的大小就是4,一号线程下载4,二号线程下载4,最后剩下2,那么三号线程就下载2)

(3)计算完每个线程下载的大小,就开始计算每个线程下载的开始位置和结束位置

threadIndex:线程下标,从0开始

开始位置:int    startPosition=threadIndex*singleThreadNum

结束位置    int     endPosition=(threadIndex+1)*singleThreadNum-1

(4)那么就可以开始计算每个线程从哪里下载到哪里

Range     startPosition-endPosition


客户端

在本地创建文件,文件大小要求和服务器中文件的大小一样,就可以下载到本地的位置了



4.序列化和反序列化

代码如下

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


import com.zking.entity.Person;


public class TestSer {
public static void main(String[] args) {
//序列化(将对象 存到硬盘中)
Person person=new Person("admin", "123");
try {
//序列化
// ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("user.exe"));
// oos.writeObject(person);
// oos.close();


//反序列化(将存档从硬盘中读出来)
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("user.exe"));
Person person2=(Person) ois.readObject();
System.out.println(person2);
ois.close();
} catch (Exception e) {
e.printStackTrace();



}
}

原创粉丝点击