Java IO流相关知识代码解析

一、IO流的分类

字符流

Reader
InputStreamReader(节点流)
BufferedReader(处理流)
Writer
OutputStreamWriter(节点流)
BufferedWriter(处理流)
PrintWriter

字节流

InputStream
FileInputStream(节点流)
BufferedInputStream(处理流)
ObjectInputStream(处理流)
PrintStream
OutputStream
FileOutputStream(节点流)
BufferedOutputStream(处理流)
ObjectOutputStream(处理流)

断点处理的流

RandomAccessfile

二、IO流的用法

1、转换流的用法

     FileInputStream in = new FileInputStream(newFile(""));
      Readerreader = new InputStreamReader(in);//字节转字符
      FileOutputStreamout = new FileOutputStream(newFile(""));
      Writer writer = new OutputStreamWriter(out);//字符转字节

2、对象序列化,对象需要实现Serializable接口

      FileOutputStreamfileOutputStream = new FileOutputStream("C:\\Users\\lx\\Desktop\\Record.txt");
      ObjectOutputStreamobjectOutputStream = new ObjectOutputStream(fileOutputStream);
      objectOutputStream.writeObject(object);//向指定文件写入对象object
      objectOutputStream.close();

      FileInputStreamfileInputStream = new FileInputStream("C:\\Users\\lx\\Desktop\\Record.txt");
      ObjectInputStreamobjectInputStream = new ObjectInputStream(fileInputStream);
      object = objectInputStream.readObject();//读取得到对象object
      fileInputStream . lose();

3、断点的运用

public class Copy extends Thread{
	//可以利用多线程实现拷贝
	longstart;
	longend;
	Filesorce;
	Filetargetdir;
	publicCopy() {
	}
	publicCopy(longstart,long end, File sorce, File targetdir) {
		//利用构造方法传递需要拷贝的长度,拷贝开始位置,以及目标文件和源文件
		super();
		this.start= start;
		this.end= end;
		this.sorce= sorce;
		this.targetdir= targetdir;
	}
	@Override
	   publicvoid run(){
		try{
			RandomAccessFilesouceRaf = new RandomAccessFile(sorce,"r");
			RandomAccessFiletargetRaf = new RandomAccessFile(newFile(targetdir,sorce.getName()),"rw");
			souceRaf.seek(start);
			targetRaf.seek(start);
			intlen= 0;
			byte[]bs = new byte[1024];
			longseek;
			System.out.println(start+"---->"+end+this.getName());
			while((len= souceRaf.read(bs))!=-1){
				targetRaf.write(bs, 0, len);
				seek= souceRaf.getFilePointer();
				//获取断点位置
				if(seek== end){
					break;
				}
			}
			targetRaf.close();
			souceRaf.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}

4、字节流的用法

public class Test_InputStream {
	//利用字节流获取文本文件内容,但是容易出现问题
	/*
  //可能出现int长度越界
  public static void main(String[] args) throws IOException {
    InputStream inputStream = new FileInputStream(new File("C:\\Users\\lx\\Desktop\\test\\33.txt"));
    byte[] b = new byte[inputStream.available()];
    inputStream.read(b);
    String str = new String(b);
    System.out.println(str);
  }
*/
	//可能出现乱码
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\Users\\lx\\Desktop\\test\\33.txt");
		InputStream inputStream = new FileInputStream(file);
		//统计每次读取的实际长度
		int len = 0;
		//声明每次读取1024个字节
		byte[] b = new byte[2];
		StringBuffer sBuffer = new StringBuffer();
		while((len=inputStream.read(b))!=-1){
			sBuffer.append(new String(b,0,len));
		}
		System.out.println(sBuffer.toString());
	}
}
//利用字节流拷贝文件
public void copy(File sourceFile, File targetDir) {
	//
	FileInputStreamfileInputStream = null;
	FileOutputStreamfileOutputStream = null;
	fileInputStream= new FileInputStream(sourceFile);
	FiletargetFile = new File(targetDir,sourceFile.getName());
	fileOutputStream= new FileOutputStream(targetFile);
	byte[]b = new byte[1024];
	intlen = 0;
	while((len= fileInputStream.read(b)) != -1) {
		fileOutputStream.write(b, 0, len);
	}
}

5、缓存字符流的用法

publicstatic void main(String[] args) throws IOException {
	//缓存字符流实现写入文件
	InputStreamin = System.in;
	Readerreader = new InputStreamReader(in);
	BufferedReaderbr = new BufferedReader(reader);
	BufferedWriterbw = new BufferedWriter(new FileWriter(new File("src/1.txt")));
	Strings="";
	while((s=br.readLine())!=null) {
		bw.write(s);
		bw.newLine();
		bw.flush();
		//字符流千万不要忘了flush!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	}
}

总结

以上就是本文关于Java IO流相关知识代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 【Java IO流】字节流和字符流的实例讲解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作--也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3.从流的内容来讲,有字节和字符之分. 这篇文章先后讲解IO流中的字节流和字符流的输入和输出操作. 一.字节流 1)输入和输出流 首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream.OutputStream. InputStream抽象了应用程序读取数据的方式,即

  • Java中IO流文件读取、写入和复制的实例

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.list(); //获取目录下的文件 File[] files=f.listFiles(); 1.Java怎么读取文件 package com.yyb.file; import java.io.File; import java.io.FileInputStream; import java.io.In

  • java的IO流详细解读

    流,就是一系列的数据. 当不同介质之间有数据交互的时候,JAVA就使用流来实现.数据源可以是文件,还可以是数据库.网络甚至其他的程序. 比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流. 字节流(以字节的形式读取和写入数据) InputStream字节输入流同时也是抽象类,只提供方法声明,不提供方法的具体实现. FileInputStream是InputStream的子类,下面以FileInputStream为例进行文件读取 package testIO; import java.i

  • java IO流读取图片供前台显示代码分享

    最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了点资料看了会api, 嘿感觉挺简单的,由于是第一次采用IO流的方式进行读取图片供页面显示,所以把以下代码记录一下 后台代码: /** * IO流读取图片 by:long * @return */ @RequestMapping(value = "/IoReadImage/{imgName}"

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • java IO流将一个文件拆分为多个子文件代码示例

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位,对文件进行分割或合并. 看下基本思路: 如果有一个大文件,指定分割大小后(比如:按1M切割) step 1: 先根据原始文件大小.分割大小,算出最终分割的小文件数N step 2: 在磁盘上创建这N个小文件 step 3: 开多个线程(线程数=分割文件数),每个线程里,利用RandomAccessF

  • Java使用IO流实现音频的剪切和拼接

    需求: 使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件 思路(以两首歌为例): 第一首歌有一个输入流对象bis1.第二首歌有一个输入流对象bis2,他们公用一条输出流对象bos(在选择构造方法的时候选择含有布尔类型参数的那个),待第一首歌剪切完成后,在此基础上追加第二首歌的"高潮部分". 实现代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream;

  • Java IO流对象的序列化和反序列化实例详解

    Java-IO流 对象的序列化和反序列化 序列化的基本操作 1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 2.序列化流(ObjectOutputStream),writeObject 方法用于将对象写入输出流中: 反序列化流(ObjectInputStream),readObject 方法用于从输入流中读取对象. 3.序列化接口(Serializeable) 对象必须实现序列化接口,才能进行序列化,否则会出现异常.这个接口没有任何方法,只是一个标准. packag

  • Java IO流相关知识代码解析

    一.IO流的分类 字符流 Reader InputStreamReader(节点流) BufferedReader(处理流) Writer OutputStreamWriter(节点流) BufferedWriter(处理流) PrintWriter 字节流 InputStream FileInputStream(节点流) BufferedInputStream(处理流) ObjectInputStream(处理流) PrintStream OutputStream FileOutputStre

  • Java全面解析IO流相关知识

    目录 前言 一.File 1.File类的概述和构造方法 2.File类创建功能 3.File类判断和获取功能 4.File类删除功能 二.字节流 1.IO流的概述和分类 2.字节流写数据 3.字节流写数据的两个小问题 字节流写数据如何换行 字节流写数据如何实现追加写入 4.字节流写入数据假异常处理 5.字节流读数据(重点) 6.字节缓冲流 7.如何选择怎样得数据读取呢? 三.字符流 1.为什么会出现字符流? 2.字符串中的编码解码问题 3.如何实现解决编译解码的问题 4.字符流写数据的方法 5

  • struts2的流程和一系列相关知识代码解析

    1.客户端初始化一个指向servlet容器(Tomcat)的请求: 2.这个请求经过一系列的过滤器,接着FilterDispatcher被调用: 3.FilterDispatcher询问ActionMapper来决定这个请求是否要调用某个action: 4.如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,ActionPro根据ConfigurationManager询问框架的配置文件,找到需要调用的Action类,一般

  • Java 内省introspector相关原理代码解析

    1. JavaBean (有get/set属性,和默认构造器等规范的java类) import java.util.Date; public class Student { // 这是 字段 private String name; private int age; private Date birthday; // 这是 属性 //(get.set开头的方法,getName.setName算一个属性,单独一个set或get也算一个属性) // 属性名为 去掉get.set后 第一个大写字母变小

  • Java IO流之节点流与字符流的相关知识总结

    一.File file是文件和目录路径名的抽象表示 1.1 File的用法 用法: File file = new File("路径名"); //如 File file = new File("L:\\FileTestDemo\\AAA\\aaa.txt"); 注意:在windows中,路径名不能使用单个的\,单个的\为转义字符,可以使用\\,//或/ 1.2 File的常用方法 1.boolean createNewFile() 当且仅当具有此名称的文件尚不存在时

  • Java IO流 文件的编码实例代码

    •文件的编码 package cn.test; import java.io.UnsupportedEncodingException; public class Demo15 { public static void main(String[] args) throws UnsupportedEncodingException { String str = "你好ABC123"; byte[] b1 = str.getBytes();//转换成字节系列用的是项目默认的编码 for (

  • JAVA内存空间相关知识汇总

    Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久存储空间 Java内存

随机推荐