首页 > 编程语言 >【Java基础】字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片

【Java基础】字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片

时间:2022-10-08 20:07:42浏览次数:70  
标签:fis 字节 fos 读数据 复制 new FileInputStream public


目录

​一、字节流写数据加异常处理​

​二、字节流读数据(一次读一个字节数据)​

​三、字节流复制文本文件​

​四、字节流读数据(一次读一个字节数组数据)​

​五、字节流复制图片​


一、字节流写数据加异常处理

异常处理格式

try-catch-finally:

try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}finally{
执行所有清除操作;
}

finally特点:

被finally控制的语句一定会执行,除非JVM退出

示例代码:

public class FileOutputStreamDemo04 {
public static void main(String[] args) {
//加入finally来实现释放资源
FileOutputStream fos = null;
try {
fos = new FileOutputStream("myByteStream\\fos.txt");
fos.write("hello".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

二、字节流读数据(一次读一个字节数据)

字节输入流:

FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名

字节输入流读取数据的步骤:

● 创建字节输入流对象

● 调用字节输入流对象的读数据方法

● 释放资源

示例代码:

public class FileInputStreamDemo01 {
public static void main(String[] args) throws IOException {
//创建字节输入流对象
//FileInputStream(String name)
FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");

int by;

/*
fis.read():读数据
by=fis.read():把读取到的数据赋值给by
by != -1:判断读取到的数据是否是-1
*/
while ((by=fis.read())!=-1) {
System.out.print((char)by);
}

//释放资源
fis.close();
}
}

三、字节流复制文本文件

需求:

把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt”

实现步骤:

复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)

数据源:E:\itcast\窗里窗外.txt --- 读数据 --- InputStream --- FileInputStream

目的地:myByteStream\窗里窗外.txt --- 写数据 --- OutputStream --- FileOutputStream

代码实现:

public class CopyTxtDemo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\itcast\\窗里窗外.txt");

//根据目的地创建字节输出流对象
FileOutputStream fos = new FileOutputStream("myByteStream\\窗里窗外.txt");

//读写数据,复制文本文件(一次读取一个字节,一次写入一个字节)
int by;
while ((by=fis.read())!=-1) {
fos.write(by);
}

//释放资源
fos.close();
fis.close();
}
}

四、字节流读数据(一次读一个字节数组数据)

一次读一个字节数组的方法:

public int read(byte[] b):从输入流读取最多b.length个字节的数据

返回的是读入缓冲区的总字节数,也就是实际的读取字节个数

示例代码:

public class FileInputStreamDemo02 {
public static void main(String[] args) throws IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");

/*
hello\r\n
world\r\n
第一次:hello
第二次:\r\nwor
第三次:ld\r\nr
*/

byte[] bys = new byte[1024]; //1024及其整数倍
int len;
while ((len=fis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}

//释放资源
fis.close();
}
}

五、字节流复制图片

案例需求:

把“E:\itcast\mn.jpg”复制到模块目录下的“mn.jpg”

实现步骤:

● 根据数据源创建字节输入流对象

● 根据目的地创建字节输出流对象

● 读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)

● 释放资源

代码实现:

public class CopyJpgDemo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\itcast\\mn.jpg");
//根据目的地创建字节输出流对象
FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");

//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys))!=-1) {
fos.write(bys,0,len);
}

//释放资源
fos.close();
fis.close();
}
}

标签:fis,字节,fos,读数据,复制,new,FileInputStream,public
From: https://blog.51cto.com/u_15815415/5738606

相关文章