JAVA之IO流-创新互联

IO流概述

IO:输入/输出(Input/Output)

成都创新互联公司主营南昌县网站建设的网络公司,主营网站建设方案,成都App制作,南昌县h5微信小程序搭建,南昌县网站营销推广欢迎南昌县等地区企业咨询

流:流是一种抽象概念,是对数据传输的总称.即数据在设备间的传输称为流,流的本质是数据传输

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。

IO流是用来处理设备间数据传输问题的

IO流分类 

按照数据的流向:

输入流:读数据

输出流:写数据

按照数据类型:

  字节流:字节输入流,字节输出流

  字符流:字符输入流,字符输出流

一般来说,IO流的分类是按照数据类型来分的

字节流 

647e86fa3e1542b7a66e617542c755c0.jpg

字节流读数据:

  int read() :一次读取一个字节

  int read( byte[ ] bys) :一次读取一个字节数组

字节流写数据:

  void write( int by) :一次写一个字节

  void write( byte[ ] bys) :一次写一个字节数组

  void write( byte[ ] bys,int index,int len) :一次写一个字节数组的一部分

释放资源:

  void close( ) :关闭流

小结:字节流可以复制任意文件数据,有4种方式,一般采用字节缓冲流一次读写一个字节数组的方式

//方法1
FileInputStream fis = new FileInputStream("文件路径名");
FileOutputStream fos = new FileOutputStream("文件路径名");
		
int ch;
while((ch = fis.read()) != -1) {
	fos.write(ch);
}
		
fis.close();
fos.close();


//方法2
FileInputStream fis = new FileInputStream("文件路径名");
FileOutputStream fos = new FileOutputStream("文件路径名");
		
byte[] bys = new byte[1024];
int len;
while((len = fis.read(bys)) != -1) {
	fos.write(bys, 0, len);
}
		
fis.close();
fos.close();


//方法3
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径名"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径名"));
		
int ch;
while((ch = bis.read()) != -1) {
	bos.write(ch);
}
		
bis.close();
bos.close();


//方法4
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径名"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径名"));
		
byte[] bys = new byte[1024];
int len;
while((len = bis.read(bys)) != -1) {
	bos.write(bys, 0, len);
}
		
bis.close();
bos.close();
字符流 

645ea7deb41a4e50aa950e3b5bef970a.jpg

字符流读数据:

  int read() :一次读取一个字符

  int read( char[ ] chs) :一次读取一个字符数组

  String readLine( ) :一次读取一行,不包含任何终止字符(字符缓冲流特有)

字符流写数据:

  void write( int ch) :一次写一个字符

  void write( char[ ] chs) :一次写一个字符数组

  void write( char[ ] chs,int index,int len) :一次写一个字符数组的一部分

  void flush( ) :刷新流,刷新流后,数据才会写入

  void newLine( ) :写一个换行符(字符缓冲流特有)

  void write( String line) :一次写一个字符串(字符缓冲流特有)

释放资源:

  void close( ) :关闭流,关闭时先刷新流,再关闭流

  注:flush刷新缓冲后可以继续写入数据,close刷新缓冲后关闭流,不能再写入数据

小结:字符流只能复制文本文件,有5种方式,一般采用字符缓冲流的特有功能

//字符缓冲流写入数据
BufferedWriter bw = new BufferedWriter(new FileWriter("文件路径名"));
		
for(int i = 0;i<5;i++) {
	bw.write("hello"+i);
	bw.newLine();
	bw.flush();
}
		
bw.close();

//字符缓冲流读取数据
BufferedReader br = new BufferedReader(new FileReader("文件路径名"));

String line;
while((line = br.readLine()) != null) {
	System.out.println(line);
}
		
br.close();
递归

程序调用自身的编程技巧称为递归,一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

递归遍历目录示例:

public static void main(String[] args) {

	File f = new File("Z:\\Learn\\Learn2");
	getFilesPath(f);
}

public static void getFilesPath(File file) {//遍历目录得到所有文件的绝对路径
	File[] files = file.listFiles();
	if (files != null) {
		for (File f : files) {
			if (f.isDirectory()) {
				getFilesPath(f);
			} else {
				System.out.println(f.getAbsolutePath());
			}
		}
	}
}
字符串编码解码

String str = "中国";
		
        //平台默认字符集编码
		byte[] bys = str.getBytes();//[-28, -72, -83, -27, -101, -67]
		
        //UTF-8编码
//		byte[] bys = str.getBytes("UTF-8");//[-28, -72, -83, -27, -101, -67]
		
        //GBK编码
//		byte[] bys = str.getBytes("GBK");//[-42, -48, -71, -6]
		
		System.out.println(Arrays.toString(bys));//输出字符串编码后生成的字节数组数据
		
        //平台默认解码
		String s = new String(bys);
		
        //指定字符集解码
//		String s = new String(bys,"UTF-8");
		
//		String s = new String(bys,"GBK");
		
		System.out.println(s);//输出解码后的字符串

注:字符流为简化使用FileReader和FileWriter,但若涉及到编码解码问题,还需使用InputStreamReader和OutputStreamWriter

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:JAVA之IO流-创新互联
文章出自:http://azwzsj.com/article/cdodog.html