java流的基本应用

按流动方向的不同可以分为输入流和输出流;
按处理数据的单位不同分为字节流和字符流;
按功能的不同可分为节点流和处理流;
Io流最关键的就是:读进来、写进去。
所有流都继承于以下四种抽象流类型的某一种:(抽象流)
字节流 字符流
输入流 InputStream Reader
输出流 OutputStream writer
//输出流
String p=“你又来了!默默”;
OutputStream out=new FileOutputStream(“F:/z/z/p1.txt”);
out.write(p.getBytes());//写数据
out.flush();//刷新该流的缓冲
out.close();//关闭流
在这里插入图片描述

//输入流
InputStream in=new FileInputStream(“F:/z/z/p.txt”);
byte[] b=new byte[1024];//先存放在数组中
int i;//声明一个值进行缓冲
while((i=in.read(b))!=-1){//读取数据
System.out.println(new String(b,0,b.length));
}
b.clone();//关闭流
在这里插入图片描述
//文件拷贝
File src =new File(“F:/z/ChuLiLiu.txt”);//拷贝文件的路径
File cop=new File(“F:/z/ChuLiLiu1.txt”);//拷贝成功后的路径
copy(src,cop);//拷贝的方法
System.out.println(“well done”);

//文件拷贝的方法
private static void copy(File src, File cop) {
// TODO Auto-generated method stub
try(InputStream in=new FileInputStream(src);//输出流
OutputStream out=new FileOutputStream(cop)) {//输入流
byte[] b=new byte[1024];//用数组存放数据
int i;//缓冲
while((i=in.read(b))!=-1){//一遍读一遍写
out.write(b);
}
} catch (IOException e) {//捕获异常
// TODO: handle exception
e.printStackTrace();
}

}

拷贝文件是读和写是同时运作的过程,把输入流的数据先存放到数组中,数组中的数组转入输入流中,这样就是复制文件了。

PS:拷贝文件可以是任何类型的,例如:文本、Word文档、图片、视频、PDF等。但是不能拷贝文件夹,拷贝文件夹是会拒绝访问的。如果要拷贝文件夹,那么就要先获取到文件夹进行拷贝,再拷贝文件夹下面的文件,下面将会列出拷贝文件夹以及里面的文件夹里的内容。

完全复制一个文件夹及其里面的内容:
public static void main(String[] args) throws IOException {
//遍历目录
File file=new File(“F:/z”);
pr(file,0);
}

private static void pr(File file, int i) throws IOException {
	if(file.exists()){
		if(file.isDirectory()){
			//获取要复制的最高级的父目录文件甲
				String strA=file.getAbsolutePath().substring(3);
				//把复制的最高级的父目录文件甲 放到要复制到哪的路径
				File file2=new File("F:/s/"+strA);
				//创建文件夹
				System.out.println(file2);
				file2.mkdir();
				
				//获取遍历出最高级的父目录文件夹在的所有文件
				File[] files=file.listFiles();
				for (File file3 : files) {
					pr(file3,i+1);
				}
				System.out.println("files"+files);
				
				
		}
		else{
			//要复制的路径
			File file2=file.getAbsoluteFile();//绝对路径
			String string=file.getAbsolutePath().substring(3);
			//复制到哪的路径
			File file3=new File("F:/s/"+string);
			pr2(file2,file3);
			
		}
		
		
	}
}

//这部分是跟上面所述的一样,拷贝文件,边读边写。
private static void pr2(File file2, File file3) throws IOException {
// TODO Auto-generated method stub
InputStream in=new FileInputStream(file2);
OutputStream out=new FileOutputStream(file3);
byte[] bs=new byte[1024];
int i;
while((i=in.read(bs))!=-1){
out.write(bs);
}
in.close();
out.close();
}

不管是何种输入输出流,其基本的操作原理是一样的
编码思路: 使用 File 类找到一个文件对象,得到 IO 操作的源或目标→→ 通过字节流或字符流的子类创建对象,(得到 IO 操作的通道)→ 进行读或写的操作,(IO 操作) → 关闭输入/输出,(打完收工,注意节约资源,关掉)

字节流和字符流:二者是操作单位不一样,一个字符等于两个字节
///创建流
Reader inputStream=new FileReader(“F:/z/z/test.txt”);
//创建缓存数组
char[] bs=new char[1024];
///存放读取的字节数
int count=0;
//读取数据

		while((count=inputStream.read(bs,0,bs.length))!=-1){
			System.out.println(new String(bs,0,count));
		}

String str=“qwer”;
try{
Writer writer=new FileWriter(“F:/z/z/test2.txt”);
writer.write(str);
writer.flush();
writer.close();
}
catch(IOException e){
e.printStackTrace();
}

字节流:程序→文件
字符流:程序 →缓冲区→文件

两者相比,肯定使用字节流更加的方便,而且在程序中像图片、MP3 等都是采用字节的方式 的保存,那么肯定字节流会比字符流使用的更广泛。 但是需要说明的是,但是如果要是想操作中文的话,字符流肯定是最好使的。

节点流和处理流:
节点流:直接操作目标设备,例如:磁盘或一块内存区域。
处理流:通过操作节点流,从而间接完成输入或输出功能的流。处理流是的存在是建立 在一个已经存在的输入流或输出流的基础之上的

//处理流
Writer writer=new FileWriter(“F:/z/ChuLiLiu.txt”);
PrintWriter printWriter=new PrintWriter(writer);
String str=“hi”;
String str2=“ni”;
String str3=“hao”;
printWriter.println(str);
printWriter.println(str2);
printWriter.println(str3);
printWriter.close();

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值