IO流(一) FileInputStream与FileOutputStream

2024-04-12 10:48

本文主要是介绍IO流(一) FileInputStream与FileOutputStream,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.FileInputStream

1.read()

package com.io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*java.io.FileInputStream:1.文件字节输入流,万能的,任何类型的文件都可以采用这个流来读2.字节的方式,完成输入的操作,完成读的操作(硬盘-->内存)*/
public class FileInputStreamTest01 {public static void main(String[] args) {//创建文件字节输入流对象FileInputStream fis = null;try {fis = new FileInputStream("D:\\code\\untitled\\temp.txt");//int readData = fis.read();//这个方法的返回值是读取到的字节本身 //返回值为-1时表示抵达文件末尾//System.out.println(readData);//97int readData = 0;while ((readData = fis.read()) != -1) {//使用while读取所有内容System.out.println(readData);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//在finally语句块中确保流的关闭if (fis != null) {//关闭的前提是:流不是空,流是null的时候没必要关闭 避免空指针异常try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

2.read(byte[] b)

package com.io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*
int read(byte[]b)一次最多读取b.length个字节减少硬盘和内存的交互,提高程序的执行效率往byete[]数组中读*/
public class FileInputStreamTest03 {public static void main(String[] args) {FileInputStream fis =null;try {fis = new FileInputStream("temp.txt");//IDEA中的默认路径为当前project的根//开始读,采用byte数组,一次读取多个字节,最多读取length个字节byte[] bytes = new byte[4];//一次读取4个字节int readCount  = fis.read(bytes);//这个方法的返回值是读取到的字节的数量System.out.println(readCount);//4//System.out.println(new String(bytes));//abcdSystem.out.println(new String(bytes,0,readCount));//abcdreadCount  = fis.read(bytes);System.out.println(readCount);//2 第二次只能读取到俩个字节//System.out.println(new String(bytes));//efcdSystem.out.println(new String(bytes,0,readCount));//efreadCount = fis.read(bytes);System.out.println(readCount);//-1 读取不到一个字节就返回-1} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

可使用while循环读取

public static void main(String[] args) {FileInputStream fis = null;try {fis = new FileInputStream("temp.txt");int readCount = 0;byte[] bytes = new byte[4];while ((readCount = fis.read(bytes)) != -1) {//把byte数组转换成字符串 输出System.out.print(new String(bytes, 0, readCount));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}

3.FileInputStream 的其他常用方法

package com.io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*FileInput类的其他常用方法int available() : 返回流中剩余没有读到的字节数量long skip(long n):跳过几个字节不读*/
public class FileInputStreamTest05 {public static void main(String[] args) {FileInputStream fis = null;try {fis= new FileInputStream("temp.txt");//读一个字节int readByte = fis.read();//还剩余可以读的字节数量:5System.out.println("剩下 "+fis.available()+" 个数量没有读");//5//这个方法的用处byte[] bytes = new byte[fis.available()];//这种方法不适合太大的文件 因为byte数组不能太大//不需要循环 ,直接读一次可以读取所有数据int readCount = fis.read(bytes);System.out.println(new String(bytes));//fis.skip(3);//跳过} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

二.FileOutputStream

write

package com.io;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileOutputStreamTest01 {public static void main(String[] args) {FileOutputStream fos = null;try {//myfile文件不存在时会自动新建//这种方式会将与原文件清空再写入//fos = new FileOutputStream("myfile");//以追加的方式在文件末尾写入,不会清空原文件内容fos= new FileOutputStream("myfile",true);byte[] bytes = {97,98,99,100};//将byte数组全部写出fos.write(bytes);//将byte数组的一部分写出fos.write(bytes,0,2);//写出字符串String s ="tjn是真的帅";byte[] bytes1 = s.getBytes();fos.write(bytes1);fos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}

三.文件拷贝

package com.io;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*使用FileInputStream与FileOutputStream完成文件的拷贝拷贝的过程是一边写,一边读使用以上字节流可以拷贝任何文件*/
public class copy01 {public static void main(String[] args) {FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream("C:\\Users\\Administrator\\Pictures\\Feedback\\png\\1.png");fos = new FileOutputStream("D:\\1.png");byte[] bytes = new byte[1024 * 1024];//一次拷贝最多1M(根据数组大小决定)int readCount = 0;while ((readCount = fis.read(bytes)) != -1) {fos.write(bytes, 0, readCount);}fos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//fis与fos分开try//一起try的时候,其中一个出现异常可能会影响另外一个流的关闭if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}

 

这篇关于IO流(一) FileInputStream与FileOutputStream的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896918

相关文章

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

JavaEE-文件操作与IO

目录 1,两种路径 二,两种文件 三,文件的操作/File类: 1)文件系统操作 File类 2)文件内容操作(读文件,写文件) (1)打开文件 (2)关闭文件 (3)读文件/InputStream (4)写文件/OutputStream (5)读文件/reader (6)写文件/writer (7)Scanner 四,练习: 1,两种路径 1)绝对路径

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO: 数据写到缓存,再刷写到磁盘上

linux基础IO——动静态库——进程编址、进程执行、动态库加载

前言:本节内容为基础IO部分的最后一节, 主要是为了讲一下动静态库里面的动态库如何加载到内存, 动态库的地址等等。 但是,这些内容牵扯到了程序的编址, 程序的加载, 进程的执行等等知识点, 所以,我们会从程序的编址讲起, 一直到进程的执行, 以及动态库加载结束。         ps:本节内容涉及到了进程地址空间, 磁盘的内容, 建议友友们了解相关知识后再来观看。 目录

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

day09-IO-字符流其它流

一、字符流 字符流(只能做文本文件的处理)字符输入流 Reader--FileReader字符输出流 Writer--FileWriter​使用文件字符输入流的好处:读取中文不会出现乱码问题 1.1 字符输入流 构造器说明public FileReader (File file)创建字符输入流管道与源文件接通public FileReader(String pathname)创建字