A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪璨 中级黑马   /  2012-6-13 00:00  /  2720 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汪璨 于 2012-6-19 22:10 编辑

public class Test {
public static void main(String[] args) {
  Image img = new Image();
  String str = img.getRimg();
  img.getWimg(str);
}
}



//输入、输出类

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Image {
public String getRimg(){
  String s = "";
  int i;
  try {
   FileReader in = new FileReader("text\\img.txt");
    while((i=in.read())!=-1){
     s = s+(char)i;
    }
    in.close();
  }catch (FileNotFoundException e) {
   e.printStackTrace();
  }catch (IOException e) {
   e.printStackTrace();
  }finally{
   return s;
  }
}



//输出类
public void getWimg(String content){
  try {
   FileWriter out = new FileWriter("text\\img.jpg");
   char[] ch = content.toCharArray();
   System.out.println(ch);
   for(int i=0;i<ch.length;i++){
    out.write(ch);
   }
   out.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
}
}

图片是空白的!代码那里有错吗?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 好浪费内存的代码~~

查看全部评分

7 个回复

倒序浏览
FileReader in = new FileReader("text\\img.txt");   

你自己看看你这代码,read的是什么

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先是你咋将一个txt文本文件即字符文件,存储为一个二进制的jpg图片呢,这肯定是不可行的。
即使源是一张jpg图片,也不能使用FileReader、FileWriter这类工具来操作,他们都是字符流,而图片是二进制文件,应该直接操作字节,被当作字符操作会使得图片数据损坏。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你用的是字符流的方式来读取图片,那当然不行了。流也分为两种嘛,一种是字符流,另一种是字节流。字符流只是用过来操作文本数据的。字节流是用来操作如图片、音频等数据的。如何读取图片给楼主举个例子:

        public static void main(String[] args) {
                copy();
        }

        public static void copy() {
                FileInputStream fis = null;// 读取一个文件图片数据,并指定存放位置
                FileOutputStream fos = null;// 写一个文件图片数据,并指定存放位置
                try {
                        fis = new FileInputStream("E:\\myuser\\img.jpg");
                        fos = new FileOutputStream("E:\\picture1.jpg");
                        byte[] buff = new byte[1024];
                        int len = 0;
                        while ((len = fis.read(buff)) != -1) {
                                fos.write(buff, 0, len);
                        }
                } catch (Exception e) {
                        throw new RuntimeException("读取图片失败");
                } finally {
                        try {
                                if (fis != null) {
                                        fis.close();
                                }
                                if(fos != null){
                                        fos.close();
                                }
                        } catch (IOException e) {
                                throw new RuntimeException("关闭失败");
                        }
                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主和我一样。后面的视频还没有看吧、 我也干过这事; 要有耐心啊。看看后面的字节流;
回复 使用道具 举报
这是我以前回复另一个朋友的贴:这个代码根本就不能除了纯文本之外的任何文件;这个叫字符读取流,只能读写文本、要多媒体之类的文件需要字节读取流:FileInputStream,FileOutputStream;
以前我写的一个代码公共参考
import java.io.*;
class  CopyMedia
{
        public static void main(String[] args)
        {
                FileOutputStream fos= null;
                FileInputStream fis = null;
                try
                {
                         fos=new FileOutputStream("f:\\陈奕迅 - K歌之王.mp3");
                         fis=new FileInputStream("d:\\陈奕迅 - K歌之王.mp3");

                         byte[] buf=new byte[1024*10];
                         int len=0;

                         while ((len=fis.read(buf))!=-1)
                         {
                                 fos.write(buf,0,len);
                         }
                        
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if (fos!=null)
                                {
                                        fos.close();
                                }
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                        try
                        {
                                if (fis!=null)
                                {
                                        fis.close();
                                }
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                        
                }
               
        }
}
回复 使用道具 举报
我同意楼上说的 ,我也写过对图片的读写的程序,对图片的读写 的本地读写 java 有专门的 流 有用的是 ImageIO 你可以去API 里看下
这是我写得代码 已经编译运行过

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import javax.imageio.ImageIO;

public class ImageIo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                //String readFormats[] = ImageIO.getReaderFormatNames();//返回一个 String 数组,该数组列出被当前已注册 reader 集合所理解的所有非正式格式名称。
                //String writeFormats[] = ImageIO.getWriterFormatNames();// 返回一个 String 数组,该数组列出当前已注册 writer 集合所理解的所有非正式格式名称。
                //System.out.println("Readers:  " + Arrays.asList(readFormats));
                //System.out.println("Writers:  " + Arrays.asList(writeFormats));
                BufferedImage bImage=null;
        File file1 = new File("G:\\Downloads\\kaka.jpg");
        try {
                         bImage = ImageIO.read(file1);
                } catch (IOException e) {
                       
                        e.printStackTrace();
                }
        
        
        File file2 = new File("D:\\SQL\\sge.png");
        try {
                        ImageIO.write(bImage, "png", file2);
                } catch (IOException e) {
                       
                        e.printStackTrace();
                }
        }

}
你可以试试
回复 使用道具 举报
王月 中级黑马 2012-6-13 10:29:05
8#
FileReader in = new FileReader("text\\img.txt");
再怎么看这也是个文本文件,lz难道想把文本文件写成图片

FileWriter out = new FileWriter("text\\img.jpg");
还有这里,先不说前面的错,图片(包括、音频、视频)格式的肯定要用字节流来读取和写入的。
这两个地方解决了,问题也就没了,相信LZ可以的,呵呵

所以受LZ在分析问题时要借鉴毕老师的四个明确,这四个明确可以解决一般的思路和逻辑错误。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马