`
百合不是茶
  • 浏览: 348721 次
社区版块
存档分类
最新评论

JAVA IO FileInputStream和FileOutputStream,字节流的打包输出

阅读更多

在程序设计语言中,数据的保存是基本,如果某程序语言不能保存数据那么该语言是不可能存在的,JAVA是当今最流行的面向对象设计语言之一,在保存数据中也有自己独特的一面,字节流和字符流

1,字节流是由字节构成的,字符流是由字符构成的 字节流和字符流都是继承的InputStream和OutPutStream ,java中两种最基本的就是字节流和字符流

 

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

 

 

类 FileOutputStream 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

 

2,数据流:用于传输的管道

 

3.java.io 输入流 InputStream 输出流 OutputStream

 

4.对文件系统的输入和输出 字节流:数据在管道中是以字节的方式传输的

文件输入流 FileInputStream

文件输出流 FileOutputStream

将字节流包装到缓冲流中,传输的速度回提高几百倍,在下面的代码中我们将做测试

缓冲字节输入流 BufferedInputStream

缓冲字节输出流 BufferedOutputStream

 

5,使用FileInputStream来一字节一个字节的读取字节:在写代码之前先看api文档中字节输入流中有哪些方法,

在java输入流中,如果程序读取的文件不存在 程序是不会自动的创建该文件,输出流则会自己创建

 

在工程中创建一个FileInputstream01.txt 文本,里面写"中国式"个字符

package FileIO0523;
/**
 * 字节流的操作
 * 使用FileInputStream来一字节一个字节的读取字节
 */

import java.io.File;
import java.io.FileInputStream;

public class FileInputstream01 {

	public static void main(String[] args) {
      //创建文件的对象
		File file = new File("FileInputstream01.txt");
		try{
         //try-catch是因为这个文件可能不存在,程序可能会无法执行抛出异常
			//使用文本创建输入流对象
			FileInputStream fis =new FileInputStream(file);
			
//			for(int i=0;i<file.length();i++){
//				//byte ch = (byte) fis.read();
//				char ch  = (char) fis.read();
//				System.out.println(ch);
//				}
			//根据文件的长度来创建一个byte数组用来保存字节
                     //
			byte[] by= new byte[(int) (file.length())];
			fis.read(by);
			String str = new String(by);
				System.out.println(str);
				
				
			//	fis.read();
			
				fis.close();
				
			//}
			
			
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}

 

运行结果;
中国式

 分析read();也可以用来判断读的字节,当read为-1的时候表示已经是最后一个字节了

fis.read(by);将by数组中的字符一个一个读出来

String str = new String(by);通过使用平台的默认字符集解码指定的 byte 数组 ,  构造一个
新的 String
System.out.println(str);
将这个String打印出来
fis.close();关闭这个输入流,java程序是运行在java虚拟机上面的,虚拟机的运行空间是由系统内存分配的,如果不关闭输入流空间,会导致大量的内存浪费,及内存空间不足

 

 

 

6,使用FileOutputStream来一字节一个字节的写字节:在写代码之前先看api文档中字节输入流中有哪些方法,

在java输入输出的文件操作中,如果该文件在程序要输出时不存在 程序会自动的创建该文件  ,

package FileIO0523;

import java.io.File;
import java.io.FileOutputStream;

/**
 * 创建一个字节输出流
 * @author Administrator
 *
 */

public class FileoutputStream01 {

	public static void main(String[] args) {

		String str ="湖南长沙";
		//由于是静态方法可直接通过方法名来调用
		put01(str);
	}
	//创建一个静态的方法,方便在主函数中来调用该方法
	public static void put01(String str){
		//创建文件对象,文件输出对象会在输出时候判断
//		该文件是否存在,如果不存在会自动创建该标准文件
		File file = new File("FileoutputStream01.txt");
		try{
			//通过文件创建输出字节流的对象
			//创建输出流
			//参数一:要写入的文件
			//参数二:是否需要将数据追到数据的末尾ture表示追加到末尾,false表示覆盖
			FileOutputStream stream = new FileOutputStream(file,true);
			//将字符串保存到数组中
			byte[] buf=str.getBytes();
			//将数组中的元素写出来
			stream.write(buf);
			//强制的从内存写到硬盘中
			stream.flush();
			//关闭流
			stream.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}

}

 

运行结果:
湖南长沙

 

分析:该程序在写出字符时会先判断要写出的文件是否存在,如果不存会自动的创建

 

 

7,如何在一个程序中将读取到的方法写到文件中去:下面是一个复制程序:

package FileIO0523;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * 文件流的操作
 * 
 *
 * 
 */
public class FIleIO2 {

	public static void main(String args[]) {

		String path = "C:\\Users\\Administrator\\Desktop\\import";
		String path1 = "F:\\file1\\import";
		// 创建文件对象
		File f = new File(path);
		File f1 = new File(path1);

		long t1 = System.currentTimeMillis();
		byte[] str = readFile(f);
		writeFile(f1, str);
		long t2 = System.currentTimeMillis();
		System.out.println("复制完成!耗时:" + (t2 - t1) + "ms");

	}

	public static void writeFile(File f, byte[] bs) {
		try {
			// 根据文件对象建立文件输出流
			// 参数1:要写入数据的文件路径
			// 参数2:是否将数据追加到文件末尾
			FileOutputStream fos = new FileOutputStream(f, false);
			// 将输出流包装成缓冲输出流
			BufferedOutputStream bos = new BufferedOutputStream(fos);

			// 使用缓冲流将数组写入输出流
			bos.write(bs);

			// 强制将管道中的数据输出到目标,保证数据写完整
			bos.flush();
			// 关闭输出流
			fos.close();

		} catch (Exception ef) {
			ef.printStackTrace();
		}
	}

	/**
	 * 读取文件数据的方法
	 * 
	 * @param f
	 *            要读读取的文件路径
	 */
	public static byte[] readFile(File f) {
		try {
			// 根据文件建立建立文件输入流
			FileInputStream fis = new FileInputStream(f);
			// 将文件输入流打包成缓冲输入流
			BufferedInputStream bis = new BufferedInputStream(fis);

			int len = bis.available();// 得到流中的字节数
			// 方式一:通过流的长度决定读的次数
			// while(len>0){
			// //读取流中的一个字节
			// int b = fis.read();
			// System.out.println("字节:"+b);
			// len = fis.available();
			// }

			byte[] bs = new byte[len];

			// 方式二,通过读取的字节判断读取的次数〉若为-1,就结束
			// int i=0;
			// int b = fis.read();
			// while(b!=-1){
			// System.out.println("字节:"+b);
			// //将字节保存到字节数组
			// bs[i]=(byte)b;
			// i++;
			//
			// b = fis.read();
			// }

			// 方式三:直接将数据读取到字节数组,数组有多大,就读取多少次
			bis.read(bs);
			fis.close();

			return bs;

		} catch (Exception ef) {
			ef.printStackTrace();

		}

		return null;

	}

}

 分析:在这个复制程序中创建两个方法分别是读和写,在程序的执行中会先调用读的方法,将读取到的内容保存到数组中 在读的方法中不直接打印出来 通过return返回主函数中以数组的形式来接受;并且该数组要作为参数传递到写的方法中;

 

 

7,作业:在一个方法中完成文件的复制

分析:方法中要包读和写的操作

package FileIO0523;
/**
 * 不可以拷贝文件夹,图片
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 *  作业:在一个方法中完成文件的复制
 
 * @author Administrator
 *
 */
public class copyinputoutput02 {

	public static void main(String[] args) {
		
		//源文件的地址
		String path1 ="C:\\Users\\Administrator\\Desktop\\文件操作.rar";
		//copy的地址
		String path2 = "F:\\file1\\文件操作.rar";
		
		File file1 = new File(path1);
		File file2 = new File(path2);
		copy02(file1,file2);
		System.out.println("拷贝完成");
	}
	
	
	public static void copy02(File file1,File file2){
		
		try{
			//读
			FileInputStream fis= new FileInputStream(file1);
			//创建输入缓冲流
			BufferedInputStream bis = new BufferedInputStream(fis);
			//根据读到文件的大小来创建数组
			byte[] by = new byte[(int) (file1.length())];
			//读取
			bis.read(by);
			//关闭流
			fis.close();
			
			//写
			FileOutputStream fos = new FileOutputStream(file2);
			//创建输出缓冲流
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			//直接写保存在数组中的数据
			bos.write(by);
			//强制写出来
			bos.flush();
			//关闭流空间
			fos.close();
			
		}catch(Exception e){
			e.printStackTrace();
		}
		

	
	}
	

	
}

 

分析:该程序的可读性高,在一个方法中不做任何的返回,将读取到的数据保存到根据读取的文件大小创建的数组中,写的方法可以调用;

 

 

 

 

 

分享到:
评论

相关推荐

    Java IO 字节流 字符流

    Java IO系统分为两大类:字节流和字符流。字节流主要用于处理任何类型的原始数据,如图片、音频文件或者二进制文件,而字符流则专注于处理基于文本的数据。本文将深入探讨这两类流的原理、用途以及它们之间的关联。 ...

    java IO流精讲 JAVA IO流实例开发

    字节流处理原始的8位字节数据,如FileInputStream和FileOutputStream;而字符流处理Unicode字符,如Reader和Writer。字符流通常用于处理文本数据,它们内部使用了缓冲区并处理了字符编码问题,如UTF-8或GBK。 在...

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、CharArrayReader、CharArrayWriter、CharSequence、OutputStreamWriter、FileOutputStream、InputStreamReader、PrintWriter、BufferedReader、InputStream、...

    JavaIO实例|字节流|字符流|缓冲流|转换流IODemo

    1. 使用FileInputStream和FileOutputStream进行文件的复制,演示字节流的基本用法。 2. 使用FileReader和FileWriter处理文本文件,展示字符流的读写操作。 3. 引入BufferedInputStream和BufferedOutputStream,实现...

    IO流 javaio java 流

    Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又可以进一步细分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)...

    io流详解,字符流和字节流代码

    本文件包“io流详解,字符流和字节流代码”显然是针对Java IO流的深入学习资源,包含了代码示例和可能的可视化解释。 IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理的是8位的数据...

    JAVA IO流文件读写大全下载

    * 字节流文件移动和读取:通过FileInputStream和FileOutputStream类可以实现文件的移动和读取操作。 * 字符流文件移动和读取:通过FileReader和FileWriter类可以实现文本文件的移动和读取操作。 6. 文件读取和存盘...

    IO流学习(字节流 字符流 文本流)!

    例如,FileInputStream和FileOutputStream分别是用于读取和写入文件的字节流实现。字节流的操作通常涉及read()和write()方法,用于读取或写入单个字节,或者read(byte[])和write(byte[])用于读写字节数组。 接下来...

    java io流 案例

    Java IO库提供了丰富的类和接口来支持不同类型的流,包括字节流、字符流、对象流、缓冲流、转换流以及过滤流等。 字节流(Byte Stream)是处理原始二进制数据的流,分为输入流和输出流。InputStream和OutputStream...

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...

    Java IO流 总结

    在Java IO流中,节点流是指离数据源或程序最近的流处理流,主要有两种类型:字节流和字符流。字节流可以处理一切类型的数据,如纯文本、音频、视频等,而字符流只能处理纯文本数据。 2. 字节流: 字节流是Java IO...

    JavaIO流详细总结

    - 字节流:处理单个字节的数据,包括InputStream和OutputStream两大类,它们的子类如 FileInputStream 和 FileOutputStream 分别用于文件的读写。 - 字符流:处理Unicode字符,包括Reader和Writer两大类,其子类如...

    Java教程之javaIO详解

    Java IO(Input/Output)是 Java 语言中用于处理输入输出操作的类库,提供了大量的类和方法来实现文件、网络、字节流等方面的输入输出操作。下面对 Java IO 中的重要知识点进行详细说明。 一、File 类 File 类是 ...

    Java IO知识点

    字节流以InputStream和OutputStream结尾,如FileInputStream和FileOutputStream,适用于处理任何类型的原始数据。字符流以Reader和Writer结尾,如FileReader和FileWriter,主要用于文本数据的读写。 进一步细分,...

    javaIO流知识大总结

    - **字节流:**InputStream(输入)和OutputStream(输出)是所有字节流的基类,常用的子类有FileInputStream和FileOutputStream,用于文件操作;InputStreamReader和OutputStreamWriter用于将字节流转为字符流。 ...

    java io流源代码

    IO流在Java中分为两大类:字节流和字符流,每种流又有输入流和输出流之分。字节流处理的是8位的字节数据,而字符流处理的是16位的Unicode字符。 1. 字节流: - **InputStream** 和 **OutputStream** 是所有字节...

    Java IO(输入输出)案例练习

    例如,FileInputStream和FileOutputStream是最常见的字节流实现,分别用于读取和写入文件。在这个练习中,开发者可能会创建一个循环,逐字节地读取交易数据并写入到文件中,形成一个每日交易记录的日志。 接下来是...

    JAVA IO流宝典

    在字节流和字符流的基础上,Java IO流又分为四大类:输入流、输出流、字节缓冲流和字符缓冲流。输入流用于数据的读取,输出流用于数据的写入;缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader、...

    java之io流实例

    IO流在Java中分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理的是Unicode编码的字符,而字节流则处理基本的8位字节数据。这两类流又各自分为输入流(Input Stream)和输出流(Output ...

    java io流PPT课件.pptx

    例如,FileInputStream和FileOutputStream分别用于读写文件,而ByteArrayInputStream和ByteArrayOutputStream则可以在内存中操作字节流。 2. 字符流:以Unicode字符为基本处理单位,由Reader和Writer两个抽象基类...

Global site tag (gtag.js) - Google Analytics