ImageIO 不保存截图
ImageIO does not save screenshots
我想获取桌面的屏幕截图并将其保存在特定文件夹中,为此,我编写了以下方法:
class Test(){
public static String screenshot(String outDir){
try {
Robot robot = new Robot();
String format = ".png";
String fileName = String.valueOf(System.currentTimeMillis()) + format;
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File(outDir + fileName));
System.out.println("Success");
return outDir + fileName;
} catch (AWTException | IOException e) {
e.printStackTrace();
}
return null;
}
}
我打算像这样使用代码:
Test.screenshot("C:\temp\");
神奇的是它不会将屏幕截图文件写入特定文件夹,但如果我删除文件扩展名并明确硬编码文件名,它就会写入结果。
但是,这段代码有效:
public static String screenshot(){
try {
Robot robot = new Robot();
String format = "jpg";
String fileName = "XXX." + format;
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File("C:\temp\" + fileName));
System.out.println("Success");
return outDir + fileName;
} catch (AWTException | IOException e) {
e.printStackTrace();
}
return null;
}
我做错了什么?
我看过javadoc。问题是关于 formatName
,正如文档所说:formatName - a String containg the informal name of the format.
=> 意味着您的格式应该只包含名称,不包含点 (.)。所以这就是为什么你的硬编码 运行 因为你的硬编码使用正确的 formatName
我想获取桌面的屏幕截图并将其保存在特定文件夹中,为此,我编写了以下方法:
class Test(){
public static String screenshot(String outDir){
try {
Robot robot = new Robot();
String format = ".png";
String fileName = String.valueOf(System.currentTimeMillis()) + format;
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File(outDir + fileName));
System.out.println("Success");
return outDir + fileName;
} catch (AWTException | IOException e) {
e.printStackTrace();
}
return null;
}
}
我打算像这样使用代码:
Test.screenshot("C:\temp\");
神奇的是它不会将屏幕截图文件写入特定文件夹,但如果我删除文件扩展名并明确硬编码文件名,它就会写入结果。
但是,这段代码有效:
public static String screenshot(){
try {
Robot robot = new Robot();
String format = "jpg";
String fileName = "XXX." + format;
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage screenFullImage = robot.createScreenCapture(screenRect);
ImageIO.write(screenFullImage, format, new File("C:\temp\" + fileName));
System.out.println("Success");
return outDir + fileName;
} catch (AWTException | IOException e) {
e.printStackTrace();
}
return null;
}
我做错了什么?
我看过javadoc。问题是关于 formatName
,正如文档所说:formatName - a String containg the informal name of the format.
=> 意味着您的格式应该只包含名称,不包含点 (.)。所以这就是为什么你的硬编码 运行 因为你的硬编码使用正确的 formatName