`

JavaSE 10 —IO流

阅读更多
JavaSE 10 —IO流

1.IO流简介
Java的输入输出功能来自java.io包中的InputStream类,OutputStream类,Reader类和Writer类以及继承它们的各种子类。每一个数据流都是一个对象,它们提供了各种支持“读入”与写出操作的流类。

File类用于封装系统的文件和目录的相关信息。在该类中定义了一些与平台无关的方法来操作文件。
创建File对象可以通过3种方式:
new File(String pathName)
new File(String parent,String child)
new File(File parent,String child)

2.字节输入输出流
1)字节输入流抽象类InputSream
该类是输入留的抽象类,定义了操作输入留的各种方法。

实例:创建InputStream实例is 并将其赋值为System类的in属性,定义为控制台输入流,从is输入留中获取字节信息,用这些字节创建字符串,并打印到控制台输出。

import java.io.*;

public class InputMessage
{
	public static void main(String[] args){
		
		InputStream is = System.in;
		try{
		
			byte[] bs = new byte[1024];
			while(is.read(bs)!=-1){
				String str = new String(bs).trim();//去掉字符串开头和结尾的空格
				System.out.println(str);
			
			}
			is.close()
			
		}catch(IOException e){
		
			e.printStackTrace();
		}
	
	}
}
虽然Java在程序结束时会自动关闭所有打开的流,但是当使用完流后,显示地关闭任何打开的流仍时一个好习惯。

2)字节输出留抽象类OutputStream
该类是字节输出流的抽象类,定义了输出流的各种操作方法。
实例:创建OutputStream实例out,并将其赋值为System.out标准输出流。通过write()方法向流中写入数据。
import java.io.*;
public class OutPutData
{
	public static void main(String[] args){
	
		OutStream out = new System.out;
		try{
				byte[] bte = "Hello world\n".getBytes();
				out.write(bte);
				bte = "oh fuck you\n".getBytes();
				out.write(bte);
				out.close();

		}catch(IOException e){
		
			e.printStackTrace();
		}
	
	}
}
3)文件字节输入流类FileInputStream
文件字节输入流可以从指定路径的文件中读取字节数据。文件字节输入流类继承自InputStream类,并实现了读取输入流的各种方法。
语法如下:
new FileInputStream(File file);
例如:
try{
FileInputStream fileInputStream = new FileInputStream(file);
}catch(FileNotFoundException e){
e.printStackTrace();
}

4)文件字节输出流类FileOutputStream
文件字节输出流关联指定路径的文件,数据通过文件字节输出流以字节单位输出并保存到文件中。
语法:
new FileOutputStream(file);
new FileOutputStream(filePath);

实例:创建OutputStream实例out,并将其赋值为System.out标准输出流。通过write方法向流中写入数据。
import java.io.*;

public class FileCreate
{
	public static void main(String[] args){
	
		FIle file = new FIle("C:/","word.txt");
		try{
				if(!file.exists())
					file.createNewFile();
				FileOutputStream out = new FileOutputStream(file);
				byte buy[] = "Hello world,Hello China".getBytes();
				out.write(buy);
				out.close();
		}catch(Exception e){
				e.printStackTrace();
		}
		try{
				FileInputStream in = new FileInputStream(file);
				byte byt[] = new byte[1024];
				int len = in.read(byt);
				System.out.println(new String(byt,0,len));
				in.close();
		}catch(Exception e){
				e.printStrackTrace();
		}
	}
}
3.字符输入输出流
1)字符输入流抽象类Reader
该类是字符输入流的抽象类,定义了操作字符输入流的各种方法。
2)字符输出流抽象类Writer
该类是字符输出流的抽象类,定义了操作字符输入流的各种方法。
3)文件字符输入L流FileReader
文件字符输出流与文件字节输入流的功能相似,但是传送数据的方式不一样,字节流以字节为单位传送数据,可以是文本,视频,音频,图片。字符流以字符为单位传送数据,只能传送文本类型。
语法:
new File(File file);
例如:
File file = new File(“C://word.txt”);
try{
FileReader FileReader = new FileReader(file);
}catch(FileNotFoundException e1){
e1.printStackTracer();
}

实例:创建类FileInAndOutChar,读取C盘中的word.txt文件,并输出在控制台。
public class FileInAndOutChar
{
	public static void main(String[] args){
	
		File file = new File("C://word.txt");
		try{
			if(!file.exists())
				System.out.println("Cannot open it!");
			else{
				FileReader fr = new FileReader(file);
				char[] data = new char[256];
				int length = 0;
				while((length = fr.read(data))>0){
					String str = new String(data,0,length);
					System.out.println(str);
				}
				fr.close();
			}

		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
4)文件字符输出流FileWriter
文件字符输出流类(FileWriter)继承自Writer类,提供了向文件输出数据的各种方法,数据通过文件字符输出流以字符为单位输出并保存在文件中。
语法:
new FileWriter(file);
综合实例:
1. 创建类CopyFile,在该类中创建copy()方法,改方法接受文件数组和目标文件夹两个参数,如果目标文件夹不存在,则调用mkdir()方法创建文件夹,然后在循环中将文件数组中的每个文件对象写到文件夹中。
package qijia.si;
import java.io.*;

public class JavaTest {
	public static void copy(File[] fl,File file){
		if(!file.exists());
			file.mkdir();
		for(int i=0;i<fl.length;i++){
			if(fl[i].isFile()){
			try{
				FileInputStream fis = new FileInputStream(fl[i]);
				FileOutputStream out = new FileOutputStream(new File(file.getPath()+File.separator+fl[i].getName()));
				int count = fis.available();
				byte[] data = new byte[count];
				if((fis.read(data))!=-1){
					out.write(data);	//复制内容
				}
				out.close();
				fis.close();
			}catch(Exception e){
				e.printStackTrace();
				}
			}
			if(fl[i].isDirectory()){
				File des = new File(file.getPath()+File.separator+fl[i].getName());
				des.mkdir();
				copy(fl[i].listFiles(),des); //递归调用方法本身
			}
		}
	}
}
2. 创建类BranchWriter,在主方法中定义文件对象,将该对象作为参数创建BufferedWriter类实例,调用改实例的wirter()方法将数据写入文件中,然后调用newLine()方法写入换行符,实现分行向文件中写入数据。
package qijia.si;
import java.io.*;

public class JavaTest {
	public static void main(String[] args){
		String filePath = "C://BranchWriter.txt";
		File file = new File(filePath);
		try{
			if(!file.exists())
				file.createNewFile();
			FileWriter fw = new FileWriter(file);
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write("Hello world".toCharArray());
			bw.newLine();
			bw.write("China!");
			bw.newLine();
			bw.flush(); //刷新缓冲区
			System.out.println("成功!");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    JavaSE文件IO流详解.pptx

    JavaSE文件IO流详解

    JAVASE,IO流部分模块导图

    里面包含了字节输入输出流、字符输入输出流的接口继承以及具体...适用于:初学者:能更清晰地认清javaSE的IO流部分接口与实现类之间的关系。 其他人:要使用IO部分但忘记具体的实现类和常用方法可以充当帮助文档使用。

    javaSE 文件IO流

    这是我在学校学习时候的javaIO流,我们的老师讲的很好的哦

    JavaSe基于IO流的用户管理系统

    使用IO流实现文本存储,集合存放用户信息,使用了stream流等java8新特性,适用于大学生大作业、课设,本人原创

    10、JavaSE:IO流.pdf

    看B站视频项目总结的系列文档,仅供个人学习使用

    JavaSE基础篇 -- IO流的详细操作

    本资源内详尽描述了Java基础的IO操作,包括基本的文件读取、写入、复制、分割、合并等动作,详情另可参见我的博客http://blog.csdn.net/zhongkelee/article/details/47061013

    JavaSE专题-IO流重点总结(必读).doc

    Try块里面存放的是有可能发生异常的代码,通常和catch块一起使用,catch块用于处理try块中抛出的异常,finally块不是必须的,通常将释放资源(例如IO流的close方法)的代码放到finally块里面 注意:finally和Final还有...

    JavaSE超市管理系统

    javase 超市管理系统 IO流 读取数据 可购物,可积分,可兑换礼物

    JavaSE异常与多线程

    入门级笔记,适合查漏补缺。

    JavaSE进阶-06-IO流1

    1.2 文件流 1.2.1 FileInputStream(文件字节输入流) 1.2.2 FileOutputStream(文件字节输出流)

    javaSE阶段学习项目--图书馆管理系统

    适用于java初学者,通过三层架构思想进行开发设计,主要功能有增删改查,预约续借积分管理等功能。通过io流进行数据存储,涉及的知识点有多线程,io,网络编程等。

    JavaSE_JavaSE学习资料_

    JavaSE的编程资料,包括基础,集合框架,IO流等等

    Javase 技术代码测试

    该项目为Javase技术点测试,包括了线程、集合、内部类,各设计模式、枚举、io流、自定义注解等编程思想书籍几乎所以技术点,欢迎下载

    JavaSE_4_JavaIO操作_1

    File类,输入和输出流,字节-字符转换流,打印流PrintStream,对象序列化

    JavaSE精华笔记.zip

    Java基础部分笔记,包含IO流、多线程、网络编程、Lambda表达式,适合巩固基础以及新手查看,都是Java基础的精华

    狂神笔记,b站狂神说课程笔记大全(最新)

    10、JavaSE:IO流 11、JavaSE:多线程 12、JavaSE:网络编程 13、JavaSE:Gui编程 14、JavaSE:注解和反射 15、MySQL和JDBC 16、前端:Html5 17、前端:CSS3 18、前端:JavaScript、jQuery 19、JavaWeb 20、MyBatis ...

    Javase知识体系

    javase部分思维导图,包括数据库,面向对象,集合,io流, 多线程,异常,网络编程

    2020老杜最新Java零基础进阶视频教程-IO流课件

    本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...

    狂神说上课笔记未删减 Java基础到技术升级

    10、JavaSE:IO流 11、JavaSE:多线程 12、JavaSE:网络编程 13、JavaSE:Gui编程 14、JavaSE:注解和反射 15、MySQL和JDBC 16、前端:Html5 17、前端:CSS3 18、前端:JavaScript、jQuery 19、JavaWeb ...

    JavaSE_4_JavaIO操作_2

    内存操作流,System对IO流的支持,缓冲区读取,Scanner类,字符编码问题,装饰着模式Decorator

Global site tag (gtag.js) - Google Analytics