java - 为什么我无法在 Windows 上使用 Java 从下载的源正确写入 PNG 文件?

标签 java

我正在尝试从网上检索到的图像写入 PNG 文件。这就是我正在做的事情(http 代码和 IOUtils 魔法都来自 Apache):

public static void main(String[] args) throws Exception {
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(new URI("http://tinyurl.com/krb43g"));
    HttpResponse response = client.execute(get);
    HttpEntity entity = response.getEntity();
    byte[] data = IOUtils.toByteArray(entity.getContent());
    File tempFile = File.createTempFile("Picture", ".png");
    Writer writer = new BufferedWriter(new FileWriter(tempFile));
    IOUtils.write(data, writer);
    writer.close();
    Runtime.getRuntime().exec("rundll32.exe \"C:\\Program Files (x86)" +
            "\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen "
            + tempFile.getAbsolutePath());
}

图像以某种方式损坏,Windows 无法显示它。我写的有问题吗?

最佳答案

当您应该使用 OutputStream 时,您却使用了 Writer。尝试用以下内容替换涉及 Writer 的行:

OutputStream stream = new FileOutputStream(tempFile);
IOUtils.write(data, stream);
stream.close();

关于java - 为什么我无法在 Windows 上使用 Java 从下载的源正确写入 PNG 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745596/

相关文章:

java - 如何画一条只以 90 度角分开的线?

java - 找不到或加载主类,为什么?

java - RegEx - 如何仅在存在其他字符时才允许空格

java - 是否可以使用 java 客户端使用 InProcessChannel 在同一进程中调用 c++ 服务器?

java - Shell 行为 : Two (identical? ) 实例的行为与 java 不同

java - 使用 JEST API 进行 Elasticsearch 扫描和滚动

java - 如何在 ArrayList 中保留唯一值的原始顺序?

java - 添加滑动和重新排列到回收 View

java - run() 方法未执行

java - 无限期播放正弦波-Java