java _io_文件的拷贝、图片的拷贝、可变参数、try...with...resource面向

public static void close(Closeable... io) //可变参数,相当于数组

Closeable... io //可变参数,使用时相当于数组(for循环遍历)
Closeable 输入输出流实现的接口,在释放资源时使用
try...with..resource 自动释放资源工具
在try后接(is;os),其他的不变,会自动释放资源,不用管先后顺序(手动书写关闭时要先打开的后关闭)
try(InputStream iso=is;OutputStream oso=os){}//jdk9以下需要手动写入流的声明
try(is;os){} //jdk9以上自动生成流的声明

public class el {

public static void main(String[]args)
{
    //文件拷贝
    try {
        InputStream is=new FileInputStream("C:\\Users\\10853\\eclipse-workspace\\hell\\src\\hell\\abc");
        OutputStream os =new FileOutputStream("D:/d/b.txt");

        copy(is,os);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    byte[] data=null;
    //图片到字节数组
    try {
        InputStream is=new FileInputStream("C:\\Users\\10853\\eclipse-workspace\\hell\\linux学习路线.png");
        ByteArrayOutputStream os=new ByteArrayOutputStream();

        copy(is,os);
         data=os.toByteArray();
        System.out.println(data.length);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

//字节数组到文件
    try {

        ByteArrayInputStream is =new ByteArrayInputStream(data);
        OutputStream os=new FileOutputStream("D:/d/q");
    }catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }

}

public static void copy(InputStream is,OutputStream os)
{                                                   //释放资源工具,不用考虑顺序
    try(InputStream iso=is;OutputStream oso=os) {   //用到了try...with...resource自动释放资源
                                                    //jdk版本9以上为try(is;os){}
                                                    //jdk版本9以下需要重新声明流try(InputStream iso=is;OutputStream oso=os)
                                                    //{}

        byte[] flush=new byte[1024];
        int len=-1;
            while((len=is.read(flush))!=-1)
            {
                os.write(flush,0,len);
                os.flush();
            }
    }catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }catch(IOException e){
            {
                e.printStackTrace();
            }
        }finally
        {

            close(is,os);
        }

    }

//封装释放资源,用到了可变数组和输入输出流实现的接口Closeable
public static void close(Closeable... io) //可变参数,相当于数组
{
    for(Closeable i:io)
    {
        try {
            if(null!=i) {
                i.close();
            }
        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }

}

}

原文地址:https://blog.51cto.com/14437184/2423570

时间: 2024-11-10 00:09:40

java _io_文件的拷贝、图片的拷贝、可变参数、try...with...resource面向的相关文章

java _io_文件的拷贝,面向对象风格

//文件拷贝,以程序为中转站,从一个文件到另一个文件可处理图片和文本思路:type[] flush = new type[1024]在 .read(flush) ,时已将将内容存储到字节数组,只需再进行写出即可os.write(flush,0,len)然后刷新缓存,os.flush() public class test{ private String path; private String path2; private int len; private File first; private

Java 遍历文件下jpg图片并解析图片

  1 package filetest; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 import java.io.IOException; 6 import java.util.ArrayList; 7 8 import com.drew.imaging.jpeg.JpegMetadataReader; 9 import com.drew.imaging.jpeg.JpegProcessingException; 1

java _io_文件输出

1.创建源2.选择流3.操作(写出)4.刷新缓存,避免数据驻留内存5.释放资源 File f =new File("D:/d/t.txt"); //文件不存在stream流会自动创建OutputStream os=new FileOutputStream(f,true) //添加布尔类型true,会开启追加模式,默认为false.byte[] data =s.getBytes() //编码os.write(byte[] data) //写出字节数组的内容os.write(byte[]

java _io_文件读取标准步骤

File f =new File("~"); //创建源InputStream is =new FileInputStream(f); //选择流is.read() 读取单个数据,并使游标下移 //操作(读取)is.close() //释放资源,输入流读取后必须释放资源 public class test{ public static void main(String[]args) { //创建源 File f=new File("C:/Users/10853/eclipse

java _io_文件字符流输入

字符流读取数据不会产生乱码问题字节流读取数据可能会因为字符集不同,每个字符对应的字符大小不同而产生乱码/ Read read= new FileReader(File f);或路径 操作方法:除了流的选择改变和字节数组变成了字符数组,其他都一样 public class test{ public static void main(String[]args) { File f =new File("C:/Users/10853/eclipse-workspace/hell/src/hell/abc

java _io_文件字符流输出

String s="ada";char[] a=s.toCharArray(); 将字符串转换成字符数组 public class test{ public static void main(String[]args) { File f =new File("D:d/write.txt"); Writer writer=null; try { writer=new FileWriter(f); //写法一 /*String s="adad afaff哈哈哈

Java判断回文语句的程序(可变参数,String转化为char数组)

static void Huiwen(char... cs){     //char... cs  支持可变参数格式为 //(类型名... 变量名)--形参列表,相当于建立了一个长度可变的动态数组,系统根据用户需求来确定数组的长度 int b_ool=1; for(int i=0;i<cs.length/2;i++)    //length为这个可变数组的长度,注意此时长度为数组下表加1,通过cs.length-i-1可知 if(cs[i]!=cs[cs.length-i-1   // 判断 ]

Java基础:可变参数(Varagrs)的使用注意事项

因为在先前学习java的过程中,有涉及到可变参数,但没有太深入的去学习.所以最近自己找了些相关资料,想加深了解.下面就是学习整理后的内容了. 在JDK1.5后,定义方法时,可以使用同类型个数不确定的参数. 使用可变参数定义方法时,方法实际上是把这些不确定数目的参数隐式地都装进一个数组中, 然后方法再从这个数组中取出元素来使用. 也就是说,方法使用可变参数,和JDK1.4中方法使用数组参数时的处理方式是一样的,都是取出数组元素来使用. 一.定义方法: 返回值 方法名(参数类型...可变参数名) 1

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple