一、概述
1、基础概念
Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
2、应用场景
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。在开发中一般使用Commons IO工具类库。
二、IO流常用类与分类
File:Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
//遍历出E盘下的所有文件和目录
File file=new File("E:");
for (String tre:file.list()
) {
System.out.println(tre);
}
FileReader:该类按字符读取流中数据。
FileWriter :该类按字符向流中写入数据。
InputStream:基于字节读取数据。
OutputStream:基于字节写数据。
分类与继承关系
三、实例
(1)需求:将一个字符串写入磁盘中,并读取出来,利用字符流。可应用在操作文件日志上。
public static void main(String[] args) throws IOException {
String fileName="E://wfile.txt";
String wstr="what is your name?";
FileWriter wfile=null;
File file=new File(fileName);//new文件对象
//判断文件是否存在
if(!file.exists())
{
file.createNewFile();
wfile=new FileWriter(file);//首次写入文件
wfile.write(wstr);//写入流、写入的方法形式多种多样
}else
{
wfile=new FileWriter(file,true);//追加
wfile.write("I am Jim");//写入流、写入的方法形式多种多样
}
wfile.flush();//刷新流。
wfile.close();//关闭流
outFileMessage(fileName);
}
static void outFileMessage(String filename)
{
char[] c=new char[5];
File file=new File(filename);//new文件对象
try {
FileReader reader=new FileReader(file);//输入流
// reader.read(c);//读取数据
// for(char ch:c)
// {
// System.out.println(ch);
// }
// int m=reader.read();
while (m != -1)
{
System.out.print((char)m);
m=reader.read();
}
int num=0;
while ((num=reader.read(c))!=-1)
{
System.out.print(new String(c,0,num));
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
(2)需求:从网络上下载一张图片(网络中的图片一般均以二进制的形式存储),并写入磁盘中。
public static void main(String[] args) throws IOException {
Thread th=new Thread(new getImage());
th.start();
}
}
class getImage implements Runnable{
String ImageUrl="http://pic5.nipic.com/20100127/2177138_082501971985_2.jpg";
String fileName="E://iamge.jpg";
@Override
public void run() {
downloapImage(ImageUrl,fileName);
}
//下载图片
static void downloapImage(String ImageUrl,String fileName)
{
try {
//获取网络资源对象
URL url=new URL(ImageUrl);
HttpURLConnection con= (HttpURLConnection) url.openConnection();//开启连接
con.setDoInput(true);
con.setRequestMethod("GET");//请求方式
con.setConnectTimeout(6000);//请求超时6秒
InputStream inputStream=con.getInputStream();//通过输入流获取图片数据
//DataInputStream dataInputStream = new DataInputStream(url.openStream());
//字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
int len = 0;
while( (len=inputStream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
byte[] btImg=outStream.toByteArray();
inputStream.close();
FileOutputStream fileOutputStream=new FileOutputStream(fileName);
fileOutputStream.write(btImg);//写入自盘
fileOutputStream.flush();
fileOutputStream.close();//关闭流
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}