io流概述
- Java中对数据的操作都是通过流的方式。
- Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作。
- Java用于操作流的类都在io包中。
流的分类
- 流按照处理数据类型的单位的不同可以分为字节流和字符流。
- 流按照流向数据流向的不同可以分为输入流和输出流。
- 字节流:FileInputStream和FileOutputStream是java中可以按照最小字节单位读取的流,即每次读写一个字节,字节流是直接连接到输入源的流。
- 字符流:InputStreamReader和OutputStreamWriter是以字符为单位进行数据处理的IO流。本质其实就是基于字节流读取时,去查找指定的码表。字符流是为了方便中文的操作而来的。
- 只要是纯文本数据优先使用字符流,除此之外都使用字节流。
字节流
传输的数据单位是字节,也意味着字节流能够处理任何一种文件。
FileInputStream常用方法
FileInputStream(String filename)
FileInputStream(File file)
int read() 注意这里返回值的类型是int,指读取的内容
int read(byte[] buf) 读取内容填充到buf中,返回读取的长度
close()
FileInputStream应用实例:读取文件内容
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Read
{
public static void main(String[] args)
{
Read a1=new Read();
// 电脑e盘中的hello.txt 文档
String filePath="e:/hello.txt";
String reslut=a1.readFile(filePath);
System.out.println(reslut);
}
public String readFile(String filePath)
{
FileInputStream fis=null;
String result="";
try
{
// 1. 根据path路径实例化一个输入流的对象
fis=new FileInputStream(filePath);
// 2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
int size=fis.available();
// 3. 根据输入流中的字节数创建byte数组;
byte[] array=new byte[size];
// 4.把数据读取到数组中;
fis.read(array);
// 5.根据获取到的Byte数组新建一个字符串,然后输出;
result=new String(array);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(fis != null)
{
try
{
fis.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
return result;
}
}
如果文件不存在,会报java.io.FileNotFoundException
FileOutputStream常用方法
FileOutputStream(String path)
FileOutputStream(File file)
close()
void write(int v)
void write(byte[] bs)
void write(byte[] bs, int off, int len)
FileOutputStream应用实例:将内容写入文件
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Write
{
public static void main(String[] args)
{
Write a2=new Write();
// 电脑e盘中的diary.txt 文档
String filePath="e:/diary.txt";
// 要写入的内容
String content="12月23日 霾 yww答应我给我从他家带两个糖";
a2.writeFile(filePath, content);
System.out.println("文件写入成功");
}
public void writeFile(String filePath, String content)
{
FileOutputStream fos=null;
try
{
// 1、根据文件路径创建输出流
fos=new FileOutputStream(filePath);
// 2、把string转换为byte数组;
byte[] array=content.getBytes();
// 3、把byte数组输出;
fos.write(array);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(fos != null)
{
try
{
fos.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
}
如果文件不存在,会新建一个文件。
实例三 ——复制文件(可以复制各种类型的文件,包括图片、视频、音频、exe文件)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Copy
{
public static void main(String[] args)
{
Copy a3=new Copy();
String filePath1="E:\\copy\\原位置\\video.mp4";
String filePath2="E:\\copy\\新位置\\video.mp4";
// 复制文件
a3.copyFile(filePath1, filePath2);
System.out.println("文件复制成功!");
}
public void copyFile(String filePath_old, String filePath_new)
{
FileInputStream fis=null;
FileOutputStream fout=null;
try
{
// 根据path路径实例化一个输入流的对象
fis=new FileInputStream(filePath_old);
// 2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
int size=fis.available();
// 3. 根据输入流中的字节数创建byte数组;
byte[] array=new byte[size];
// 4.把数据读取到数组中;
fis.read(array);
// 5、根据文件路径创建输出流
fout=new FileOutputStream(filePath_new);
// 5、把byte数组输出;
fout.write(array);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(fis != null)
{
try
{
fis.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
if(fout != null)
{
try
{
fout.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
}
来源:CSDN
作者:晚点喝可乐z
链接:https://blog.csdn.net/qq_41949320/article/details/103669193