Java 流(Stream)、文件(File)和IO

一、概述

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();
             }
     }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值