当前位置:网站首页 > Java基础 > 正文

java基础internet



IO流概述

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

  • 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流
  • 流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

IO流的分类

  • 根据处理数据类型的不同分为:字符流和字节流
  • 根据数据流向不同分为:输入流(读文件)和输出流(写文件)

字节流

字节输出流

OutputStream类定义

public abstract class OutputStream extends Object implements Closeable,Flushable

此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InputSream类某个接收器要向文件中输出,使用FileOutputStream类

字节输入流

InputSream类定义

public abstract class InputStream extends Object implements Closeable

此抽象类便是字节输入流的所有类的超类。

FileInputStream从文件系统中的某个文件中获取输入字节

实例代码:

package com.booy; 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 ByteStreamDemo { //读文件 public static void In() { //确定要写入的目标文件 File file = new File("D:\test\test.txt"); //构建一个文件输入流对象 try { InputStream in = new FileInputStream(file); //把文件内容读出到程序中 byte[] bytes = new byte[1024]; StringBuilder buf = new StringBuilder(); int len = -1;//表示每次读取的字节长度 //把数据读入到数组中,并返回读取的字节数,当不等于-1时,表示读取到数据,等于-1表示文件已经读完 while((len=in.read(bytes))!=-1) { //根据读取到的字节数组,再转换为字符串内容,添加到StringBuilder中 buf.append(new String(bytes)); } //测试打印 System.out.println("文件读入成功:"+buf); //关闭流 in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //写文件 public static void Out() { //确定要输出的目标文件 File file = new File("D:\test\test.txt"); //构建一个文件输出流对象 try { OutputStream out = new FileOutputStream(file,true);//true不写为替换 //输出的内容 String info = "小桥流水人家 "; //把内容写入到文件中 out.write(info.getBytes()); //关闭流 out.close(); System.out.println("文件写入成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Out(); In(); } } / 运行结果: 文件写入成功! 文件读入成功: 小桥流水人家 小桥流水人家 */ 

原理:

  • 输入/输出字节流操作原理,每次只会操作一个字节(从文件中读取或写入)
  • 字节操作流:默认每次执行写入操作会把数据直接写入文件

字符流

Writer

  • 写入字符流的抽象类。子类必须实现的方法仅有write(char[],int,int)、flush()和close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
  • 与OutputString一样,对文件的操作使用:FileWrite类完成。

Reader

  • 用于读取字符流的抽象类。子类必须实现的方法只有read(char[],int,int)和close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
  • 使用FileReader类进行实例化操作。

文件字符流会自带缓存,默认大小为1024字节,在缓存满后,或手动刷新缓存,或关闭流时会把数据写入文件中

如何选择使用字节流还是字符流:

  • 一般情况操作非文本文件时,使用字节流,操作文本文件使用字符流
  • 字符流的内部实现还是字节流

实例代码:

java基础internet

package com.booy; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class CharStreamtDemo { public static void main(String[] args) { Out(); In(); } private static void In() { File file = new File("D:\test\test.txt"); try { Reader in = new FileReader(file); char[] cs = new char[1]; StringBuilder sbl = new StringBuilder(); int len = -1; while((len=in.read(cs))!=-1) { sbl.append(cs, 0, cs.length); } System.out.println(sbl); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void Out() { File file = new File("D:\test\test.txt"); try { Writer out = new FileWriter(file,true); out.write(",古道西风瘦马"); out.close(); } catch (IOException e) { e.printStackTrace(); } } } / 运行结果: 小桥流水人家,古道西风瘦马 */

代码实例:

指定一个盘符下的文件,将该文件复制到到指定的目录下

文件的复制:从一个输入流读取数据,然后通过输出流写入目标位置

package com.booy; 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 CopyFileDemo { public static void main(String[] args) { copy("D:\test\1.jpg","D:\test\my\1.jpg"); } private static void copy(String src,String target) { File srcFile = new File(src); File targetFile = new File(target); InputStream in =null; OutputStream out =null; try { in =new FileInputStream(srcFile); out =new FileOutputStream(targetFile); byte[] bytes = new byte[1024]; int len = -1; while((len=in.read(bytes))!=-1) { out.write(bytes, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(in!=null)in.close(); if(out!=null)out.close(); } catch (IOException e) { e.printStackTrace(); } } } }

字节字符转换流

转换流,可以将一个字节流转换为字符流,也可以将一个字符流转换为字节流

  • OutputStreamWriter: 可以将输出的字符流转换为字节流的输出形式
  • InputStreamReader: 将输入的字节流转换为字符流输入形式

实例代码:

package com.booy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.Charset; public class ChangerStringDemo { public static void main(String[] args) throws FileNotFoundException { //InputStream in = new FileInputStream("D:\test\test.txt"); //read(in); OutputStream out = new FileOutputStream("D:\test\test.txt"); writer(out); } private static void read(InputStream in) { Reader reader = new InputStreamReader(in,Charset.defaultCharset()); char[] cs = new char[1024]; int len = -1; try { while((len=reader.read(cs))!=-1) { System.out.println(new String(cs,0,len)); } cs.clone(); } catch (IOException e) { e.printStackTrace(); } } private static void writer(OutputStream out) { Writer writ = new OutputStreamWriter(out,Charset.defaultCharset()); try { writ.write("夕阳西下,断肠人在天涯"); writ.close(); } catch (IOException e) { e.printStackTrace(); } } }

总结

  • 上一篇: java xml基础视频
  • 下一篇: java基础学习难点
  • 版权声明


    相关文章:

  • java xml基础视频2025-04-18 18:42:03
  • java基础教学92025-04-18 18:42:03
  • 专升本java基础2025-04-18 18:42:03
  • 零基础java2025-04-18 18:42:03
  • java软件开发基础2025-04-18 18:42:03
  • java基础学习难点2025-04-18 18:42:03
  • java基础baiduyun2025-04-18 18:42:03
  • java基础面试题目2025-04-18 18:42:03
  • 用java编写基础2025-04-18 18:42:03
  • java基础入门学校2025-04-18 18:42:03