JAVA IO流读取图片的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA IO流读取图片的问题相关的知识,希望对你有一定的参考价值。

想把这个目录的这个图片放到 G:\007\2014-10\linshi\a.jpg
放到 G:\007\2014-10\a.jpg 并且把这个a.jpg名字改成b.jpg
用JAVA代码怎么实现??? 求完整代码 新手 文件流一点不懂 求指教

参考一下:

//文件原地址 
File oldFile = new File("c:/test.xls"); 
//文件新(目标)地址 
String newPath = "c:/test/"; 
//new一个新文件夹 
File fnewpath = new File(newPath); 
//判断文件夹是否存在 
if(!fnewpath.exists()) 
fnewpath.mkdirs(); 
//将文件移到新文件里 
File fnew = new File(newPath +oldFile.getName()); 
oldFile.renameTo(fnew);

追问

好像应该是要
读取这个图片
然后得到一个流
然后创建一个图片 把刚才得到的那个图片的流放进去
创建图片之前好像可以命名
我感觉是这样的 就是不知道代码怎么写

追答

我这个是移动图片的。有读取流,输出流的方式:

package org.example.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class TestIOStream 

    /**
     * 
     * DOC 将F盘下的test.jpg文件,读取后,再存到E盘下面.
     * 
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception 
        FileInputStream in = new FileInputStream(new File("F:\\\\test.jpg"));// 指定要读取的图片
        File file = new File("E:\\\\test.jpg");
        if (!file.exists()) // 如果文件不存在,则创建该文件
            file.createNewFile();
        
        FileOutputStream out = new FileOutputStream(new File("E:\\\\test.jpg"));// 指定要写入的图片
        int n = 0;// 每次读取的字节长度
        byte[] bb = new byte[1024];// 存储每次读取的内容
        while ((n = in.read(bb)) != -1) 
            out.write(bb, 0, n);// 将读取的内容,写入到输出流当中
        
        out.close();// 关闭输入输出流
        in.close();
    

参考技术A package io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class PictureCopy
public static void main(String[] args) throws IOException
BufferedInputStream in = new BufferedInputStream(new FileInputStream("E://a//QQ图片20141021152833.jpg"));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("E://b//copy.jpg"));
int i;
while((i=in.read())!=-1)
out.write(i);

out.flush();

out.close();
in.close();



//地址换下就行了
参考技术B FileInputStream fi=new FileInputStream("G:/007/2014-10/linshi/a.jpg ");
BufferedInputStream in=new BufferedInputStream(fi);
FileOutputStream fo=new FileOutputStream("G:/007/2014-10/b.jpg");
BufferedOutputStream out=new BufferedOutputStream(fo);
byte[] buf=new byte[1024];
int len=in.read(buf);
//读文件,将读到的内容放入到buf数组中,返回的是读到的长度
while(len!=-1)
out.write(buf, 0, len);
len=in.read(buf);

out.close();
fo.close();
in.close();
fi.close();追问

先谢谢您 我想再问一下 如果我只知道 G:/007/2014-10/linshi/ 这个目录下有一张图片 但是不知道这张图片叫什么 我想要读这个图片的流 要怎么办?

追答

//这段代码是获取G:/007/2014-10/linshi/这个目录下的文件 获取到了文件 就可以用上面的代码操作了
File dir = new File("G:/007/2014-10/linshi/");
File[] list = dir.listFiles();
for (int i=0; i<list.length; i++)
if (list[i].isFile()) //是文件
System.out.println("File "+list[i].getName());
else if (list[i].isDirectory()) //是目录
System.out.println("Directory "+list[i].getName());

追问

谢谢您啊
还有一点疑问 想问问您
方便加您扣扣吗?

追答

848378295

java _io_图片到内存(字节数组),字节数组到文件,练习文件流和字节数组流

//图片读取到字节数组中,字节数组写出到文件

public class test
    public static void main(String[]args)
    
        String path="C:/Users/10853/eclipse-workspace/hell/linux学习路线.png";

    byte[] data=toByteArray(path); //图片不能直接到字节数组中,is.read()返回的是int类型的大小,new String是解码
    //需要写入字节数组(内存)再通过方法返回到字节数组里
    //图片不能直接转换成字符串
    toFile(data,"D:/d/to.txt");


//图片到字节数组中
public static byte[] toByteArray(String path)

    File f =new File(path);
    byte[] last=null;

    InputStream is =null;  //选用字节流是因为,字符流只能读纯字符文本
    ByteArrayOutputStream bos=null;

    try 
        is =new FileInputStream(f);
        bos =new ByteArrayOutputStream();

        byte[] flush=new byte[1024*10];
        int len=-1;
        try 
            while((len=is.read(flush))!=-1)
            
                bos.write(flush,0,len);  //写出到字节数组中
                bos.flush();
            

            return bos.toByteArray();  //不返回字节数组的话,不知道读取哪段内存

         catch (IOException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        

    catch(FileNotFoundException e)
    
        e.printStackTrace();
    finally
    
        try 
        if(null!=is)
        
            is.close();
        

        catch(IOException e)
        
            e.printStackTrace();
        
    

    return null;



//字节数组写出到文件
//字节数组读取到程序中 ByteArrayInputStream
//程序写出到文件 FileOutputStream

public static void toFile(byte[] src,String path)

    InputStream is=null;
    OutputStream os=null;
    try
    
        is=new ByteArrayInputStream(src);
        os=new FileOutputStream(path);
        byte[] flush =new byte[1024*10];
        int len=-1;
        while((len=is.read(flush))!=-1)
        
            os.write(flush,0,len);
            os.flush();
        

    catch(IOException e)
    
        e.printStackTrace();
    finally 
        try 
            if(null!=os)
            
                os.close();
            
        catch(IOException e)
        
            e.printStackTrace();
        
    



以上是关于JAVA IO流读取图片的问题的主要内容,如果未能解决你的问题,请参考以下文章

java io流如何读取文件效率高

java io读取文件时 数据中有连续多个空格怎么处理

java io 可以读取啥格式的文件

java io读取文件时 数据中有连续多个空格怎么处理 急急急急!!!

java对文本文件进行操作:读取修改添加删除重命名等

java _io_图片到内存(字节数组),字节数组到文件,练习文件流和字节数组流