如何从Java中的String保存图像文件?

时间:2014-06-24 18:48:10

标签: java regex bytearray

我需要读取文件,提取字节并添加<segment></segment>标记。然后我必须提取字节并提取<segment>标签之间的内容。最后,标签数据将用于制作原始图像的精确副本......但我的问题是图像看起来不像原始图像。

使用文本文件可以正常工作但不能使用图像。

这是我的java代码。很简单:

public class MyFile {


public static void main(String[] args) {

     try{
     /* Read File */
        File aFile= new File("infinito.jpg");
        FileInputStream fis = new FileInputStream(aFile);
        long sizeFichero = aFile.length();

        byte []datos = new byte[(int) sizeFichero];

        fis.read(datos);
        fis.close();

        /* Write copy file */
        File copyFile = new File("infinto_COPY.jpg");
        FileOutputStream fos = new FileOutputStream(copyFile);

        /* Add bytes to array bytes */
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
        outputStream.write("<segment>".getBytes());
        outputStream.write(datos);
        outputStream.write("</segment>".getBytes());

        byte [] bytes = outputStream.toByteArray();

        /* Regular Expression */
        String text = new String(bytes);
        String regexpr = "<segment>(.*?)</segment>";
        Pattern pat = Pattern.compile(regexpr, Pattern.MULTILINE | Pattern.DOTALL);
        Matcher mat = pat.matcher(text);

        /* If find between <segment></segment> then write file */
        if (mat.find()){

            String group1 = mat.group(1);
            fos.write(group1.getBytes());
            fos.close();
        }



        } catch (IOException e) {

            e.printStackTrace();
        }


}

}

结果。原件和副本:

original

copy

我怎么能通过分析正则表达式来做到这一点?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我同意@ madhav-turangi的建议。我在Java 7上尝试了您的代码,并使用Apache Commons Codec library对二进制数据进行base64编码/解码。

要使代码生效,请在导入列表中添加:

import org.apache.commons.codec.binary.Base64;

更改行:

outputStream.write(datos);

使用:

outputStream.write(Base64.encodeBase64(datos));

然后改变你的行:

fos.write(group1.getBytes());

使用:

fos.write(Base64.decodeBase64(group1.getBytes()));

以上作品经过测试。