欢迎光临散文网 会员登陆 & 注册

Java:IO流,复制图片或视频等,字节流,输入,剪切文件,复制,测试效率【诗书画唱】

2020-07-15 17:59 作者:诗书画唱  | 我要投稿

字节流可以读取任何类型的文件,因此也可以读取文本类型的文件

自己出题,自己深入了解和理解思考是一种很好的学习方法。


复制删除(剪切)图片,设置每次读取字节长度为100,求出共读取的字节总长度,求出复制所用的时间





package IO;

 

import java.io.*;



public class lizi4 {

 

public static void main(String[] args)  throws Exception{

File weJianLuJing=new File("D://集成开发工具/7.jpg");

//用FileInputStream声明读取的字节流:

FileInputStream shuRuLiu=new FileInputStream(weJianLuJing);

//用FileOutputStream声明写入的字节流:

//用XXX getName()得到XXX的名字,这里当作相对路径,这样的话,

//XXX就会复制到相对路径

FileOutputStream shuChuLiu=

new FileOutputStream(weJianLuJing . getName());



long startTime=System. currentTimeMillis() ;

//用字节数组byte[]当作容器

byte[] ziJieShuZu=new byte [100];

// 这里的100表示每次读取的字节的长度

int xiaBiaoLength;



// xiaBiaoLength:下标的长度,就是数组长度

int ziJieZongChangDu=0;

int count=0;

while((xiaBiaoLength=shuRuLiu.read(ziJieShuZu))!=-1){

System. out . println("这次读取的字节长度:"+xiaBiaoLength);


count++;

ziJieZongChangDu=ziJieZongChangDu+xiaBiaoLength;

// 下面会写出下标0到xiaBiaoLength-1(含头含尾)的字节

shuChuLiu.write(ziJieShuZu,0,xiaBiaoLength) ;


shuChuLiu. flush();




}

System. out . println("读取的文件的字节总长度:"

+ziJieZongChangDu);


System. out . println("读取文件的次数:"

+count+"次");

long endTime=System. currentTimeMillis();

System. out . println("复制花费的时间为"

+(endTime-startTime)+"毫秒");

shuChuLiu. close();shuRuLiu.close();

weJianLuJing .delete();

//读的同时要进行写入。


}



// newFileLuJing:新的文件路径

// oldFileLuJing:旧的文件路径

//public static void fuZhiFangFa(String oldFileLuJing , String

// newFileLuJing)throws Exception{

// File oldWenJian=new File(oldFileLuJing);

// if(oldWenJian.exists()){

//// wenJianDuQuDaoDeNeiRong:

//// 文件读取到的内容

// FileReader wenJianDuQuDaoDeNeiRong=new FileReader(oldWenJian);

// String wenJianName=oldWenJian . getName();

// File NewWenjian=new File (newFileLuJing, wenJianName) ;

//// wenJianXieLuDeNeiRong:文件写入的内容

// FileWriter wenJianXieLuDeNeiRong

// =new FileWriter(NewWenjian);

// char[] ziJieShuZu=new char[30];

// int ziJieShuZuLength;

// while((ziJieShuZuLength=

//wenJianDuQuDaoDeNeiRong .read(ziJieShuZu))!=-1){

//wenJianXieLuDeNeiRong . 

//write(new String(ziJieShuZu,0,ziJieShuZuLength));

//wenJianXieLuDeNeiRong. flush();}

//wenJianXieLuDeNeiRong. close();

//wenJianDuQuDaoDeNeiRong.close();

// }else{

// System. out. println("文件不存在");

// }

// }


}




案例1:使用字节流读取文本文件后打印到控制




package IO;

import java.io.*;

import java.sql.*;

import java.util.Scanner;



public class one {



public static void main(String[] args) throws Exception {


// duQu:读取

FileReader duQu=new FileReader("xiangDui.txt");


char [] shuZu=new char[10];

int xiaBiao;

while((xiaBiao=duQu.read(shuZu))!=-1){

System.out.print(new String(shuZu,0,xiaBiao));


}

duQu.close();



}



}





案例2:提示用户输入一句话,在项目根目录建

立文本文件aa.txt,将用户输入的这句话打印到

aa.txt中




//在项目的相对路径下新建一个txt文件,内容为你对IO流字符流的总结,

//使用IO流读取该文件的内容显示在控制台


package IO;

import java.io.*;

import java.sql.*;

import java.util.Scanner;



public class two {



public static void main(String[] args)throws Exception {

File wenjian=new File("src//aa.txt");


wenjian.createNewFile();


System. out . println("创建文件成功!");


Scanner s=new Scanner(System. in);

System. out . println("请输入一句话");

String  neiRong=s.next() ;


FileWriter xieRu=new FileWriter(wenjian);


xieRu.write(neiRong);

xieRu.flush();


xieRu.close();


System. out . println("输入内容到文件,在文件中打印输入的内容成功");

}



}








案例3:使用字节流复制一张图片到项目根目录






package IO;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;


public class three {

 

public static void main(String[] args)  throws Exception{

System.out.println("开始复制...");

copyFangFa("不感兴趣侦探动漫OP.gif","Copy不感兴趣侦探动漫OP.gif");

System.out.println("复制成功!");

}



private static void copyFangFa(String yuanLaiWenJian

,String fuZhiWenJian) throws Exception{



File srcFile = new File(yuanLaiWenJian);

File targetFile = new File(fuZhiWenJian);


InputStream shuRuLiu =  null;

OutputStream shuChuLiu = null;



shuRuLiu = new FileInputStream(srcFile);

shuChuLiu = new FileOutputStream(targetFile);

byte[] byteShuZu = new byte[1024];


// xiaBiaoEnd:下标的结尾

int xiaBiaoEnd = -1;

// 下面的代码的意思是:当没!=-1的时候就一直循环查询,当查询

// 到下标末尾-1时,表明已经都从头到尾查找完了

// shuRuLiu.read(byteShuZu)也是在读取内容数值下标,

// 这里是int类型的字节

// 数组的下标

while((xiaBiaoEnd = shuRuLiu.read(byteShuZu))!=-1) {




shuChuLiu.write(byteShuZu,0,xiaBiaoEnd);

}



if(shuRuLiu != null){ shuRuLiu.close();}

if(shuChuLiu != null) {shuChuLiu.close();}


}

 









案例4:使用字节流剪切一个文件



package IO;

 

import java.io.*;



public class lizi4 {

 

public static void main(String[] args)  throws Exception{

File weJianLuJing=new File("D://集成开发工具/7.jpg");

//用FileInputStream声明读取的字节流:

FileInputStream shuRuLiu=new FileInputStream(weJianLuJing);

//用FileOutputStream声明写入的字节流:

//用XXX getName()得到XXX的名字,这里当作相对路径,这样的话,

//XXX就会复制到相对路径

FileOutputStream shuChuLiu=

new FileOutputStream(weJianLuJing . getName());

//用字节数组byte[]当作容器

byte[] ziJieShuZu=new byte [1000];

int xiaBiaoLength;

// xiaBiaoLength:下标的长度,就是数组长度

int index=0;

while((xiaBiaoLength=shuRuLiu.read(ziJieShuZu))!=-1){

// 下面会写出下标0到xiaBiaoLength-1(含头含尾)的字节

shuChuLiu.write(ziJieShuZu,0,xiaBiaoLength) ;


shuChuLiu. flush();}

shuChuLiu. close();shuRuLiu.close();

weJianLuJing .delete();

//读的同时要进行写入。


}



// newFileLuJing:新的文件路径

// oldFileLuJing:旧的文件路径

public static void fuZhiFangFa(String oldFileLuJing , String

newFileLuJing)throws Exception{

File oldWenJian=new File(oldFileLuJing);

if(oldWenJian.exists()){

// wenJianDuQuDaoDeNeiRong:

// 文件读取到的内容

FileReader wenJianDuQuDaoDeNeiRong=new FileReader(oldWenJian);

String wenJianName=oldWenJian . getName();

File NewWenjian=new File (newFileLuJing, wenJianName) ;

// wenJianXieLuDeNeiRong:文件写入的内容

FileWriter wenJianXieLuDeNeiRong

=new FileWriter(NewWenjian);

char[] ziJieShuZu=new char[30];

int ziJieShuZuLength;

while((ziJieShuZuLength=

wenJianDuQuDaoDeNeiRong .read(ziJieShuZu))!=-1){

wenJianXieLuDeNeiRong . 

write(new String(ziJieShuZu,0,ziJieShuZuLength));

wenJianXieLuDeNeiRong. flush();}

wenJianXieLuDeNeiRong. close();

wenJianDuQuDaoDeNeiRong.close();

}else{

System. out. println("文件不存在");

}

}

}


执行前:


执行后:






案例5.字节流复制一个文件夹(测试效率,就是求运行的时间)






package IO;


import java.io.*;



public class liZi5 {


public static void main(String[] args) throws Exception{

long startTime=System. currentTimeMillis() ;

copyFangFa(new File("D://集成开发工具/NewFile"),

new File("D://集成开发工具/NewFileCopy99"));

long endTime=System. currentTimeMillis();

System. out . println("复制花费的时间为"+(endTime-startTime));


}

//copyFangFa:复制文件夹的方法

public static void copyFangFa

(File oldWenJianJia, File CopyOldWenJianJia)throws Exception{

// 思路:

//1.写一个复制文件夹的方法,两个参数,1个参数是你要复制的文件夹的原位置

//第二个参数是你要复制到的位置

//2.判断原位置是不是存在,如果存在就获取文件夹里的所有的文件

//3.获取到所有的文件后得到的是一个文件的数组,遍历这个数组

//判断每个文件是文件夹还是文件,如果是文件夹,就重新调用这个方法

//进行递归,直到文件的子目录,如果是文件的话,读取该文件的信息

//写入到新文件夹里

CopyOldWenJianJia . mkdir();//创建文件夹

if(!oldWenJianJia. isHidden()){

if(oldWenJianJia.exists()){

File[] FileShuZu=oldWenJianJia. listFiles();

for(File FileShuZuXiaBiao:FileShuZu){

// FileShuZuXiaBiao:文件数组下标

if(FileShuZuXiaBiao.isFile()){

FileInputStream fis=new 

FileInputStream(FileShuZuXiaBiao.getAbsolutePath() );

FileOutputStream fos=new FileOutputStream

(new File(CopyOldWenJianJia.getAbsolutePath(),

FileShuZuXiaBiao.getName() ));


//--long startTime=System. currentTimeMillis() ;

byte[] bs=new byte [1];

int len;

while((len=fis.read(bs))!=-1){

fos. write(bs, 0,len);

fos. flush();}

//currentTimeMillis:当前时间转化的总毫秒数

//--long endTime=System. currentTimeMillis();


fos. close();

fis. close();

//--System. out . println("复制花费的时间为"+(endTime-startTime));

//flush()用于清理缓存

//close()用于关闭缓存


}

else{


copyFangFa(FileShuZuXiaBiao, 

new File( CopyOldWenJianJia

+" /"+FileShuZuXiaBiao. getName()));

}


}

}}


}



}






Java:IO流,复制图片或视频等,字节流,输入,剪切文件,复制,测试效率【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律