写图像时的java FileNotFoundException

标签 java image filenotfoundexception

我正在尝试使用 Image.IO.Write() 保存图像;我基本上从 here 复制了标准代码使用 lwjgl 截取屏幕截图。我唯一做的就是使用现有目录作为保存路径来初始化文件。

当我尝试保存图像时,FileNotFoundException 被抛出。

    glReadBuffer(GL_FRONT);
    int width  = Display.getDisplayMode().getWidth();
    int height = Display.getDisplayMode().getHeight();
    int bpp = 4; // Assuming a 32-bit display with a byte each for red, green, blue, and alpha.
    ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * bpp);
    glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    File file = new File("res/screenshots/ss_" + Sys.getTime() + ".png"); // The file to save to.
    String format = "PNG"; // Example: "PNG" or "JPG"
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

    for(int x = 0; x < width; x++)
        for(int y = 0; y < height; y++)
        {
            int i = (x + (width * y)) * bpp;
            int r = buffer.get(i) & 0xFF;
            int g = buffer.get(i + 1) & 0xFF;
            int b = buffer.get(i + 2) & 0xFF;
            image.setRGB(x, height - (y + 1), (0xFF << 24) | (r << 16) | (g << 8) | b);
        }

    try {
        ImageIO.write(image, format, file);
    } catch (IOException e) { e.printStackTrace(); }

堆栈跟踪:

java.io.FileNotFoundException: res\screenshots\ss_91733792.png (The system cannot find the path specified)
    at java.io.RandomAccessFile.open(Native Method)
    at java.io.RandomAccessFile.<init>(Unknown Source)
    at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
    at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
    at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
    at javax.imageio.ImageIO.write(Unknown Source)
    at com.va.util.Extras.takeScreenShot(Extras.java:46)
    at com.va.core.Engine.start(Engine.java:117)
    at Main.main(Main.java:26)
Exception in thread "main" java.lang.NullPointerException
    at javax.imageio.ImageIO.write(Unknown Source)
    at com.va.util.Extras.takeScreenShot(Extras.java:46)
    at com.va.core.Engine.start(Engine.java:117)
    at Main.main(Main.java:26)

最佳答案

我假设“/res/screenshots”存在并且是可写的,对吗?

我猜你程序的当前目录可能与你期望的不同。

出于调试目的,请添加这两行(或等同的行):

  String currentDir = new File(".").getAbsolutePath();
  System.out.println ("Current directory: " + currentDir);

如果“res/screenshots”不在“currentDirectory”下,则更改代码中的相对路径。

  // EXAMPLE:
  File file = new File("../..res/screenshots/ss_" + Sys.getTime() + ".png"); 

关于写图像时的java FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11142055/

相关文章:

javascript - 来自较大图像文件的质量更好的缩略图

image - 如何使用 JSP -Servlet 和 EJB 3.0 上传图像

java - 当我的文件确实存在时,出现文件未找到异常

java - JFileChooser 返回 FileNotFoundException

java - FileNotFound 之后我创建了一个 jar 文件

java - 保存实体时出现 ConcurrentModificationException

java - 使用java库信号量的有界缓冲区

wpf - WPF 中的 9 切片图像

java - CSVJDBC - 解释聚合函数中的字符串而不是整数

java - Paypal REST API 403 错误