如何在任何系统中设置图像路径以获取图像

时间:2015-11-03 09:09:22

标签: java

输入

    try {
        Image in = Toolkit.getDefaultToolkit().createImage("C:\\User\\test\\1.jpg");

        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(in)), "YOur Requested Image", JOptionPane.INFORMATION_MESSAGE);

        BufferedImage out = new BufferedImage(in.getWidth(null), in.getHeight(null), BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = out.createGraphics();
        g2d.drawImage(in, 0, 0, null);
        g2d.dispose();

        ImageIO.write(out, "jpg", new File("C:\\User\\test\\Test01.jpg"));
    } catch (Exception ex) {
        ex.printStackTrace();
    }

这里目录是我的问题,当我运行这个程序到我的膝盖它说文件没有退出我是更改目录并正确运行但是当我改变到pc或圈其问它的目录如何解决它单个代码运行每一台电脑或一圈

3 个答案:

答案 0 :(得分:1)

最终,就像使用平台独立语言(如Java)中的任何平台/安装特定工作一样,如果您想继续,您需要做一些可怕的 hacky stuff (见下文)沿着硬编码的绝对路径路线。 如果您坚持使用绝对路径,则可以像其他人提到的那样为每个安装指定一个OS / int特定的配置文件。

实际上,在设计良好的应用程序中,您不需要为资源(例如图像)指定绝对地址。您的应用程序所需的任何图像都将位于类路径中,或者从固定点(例如user.home)引用,并且只需要相对(./images/Test001.jpg)路径。

Hacky(不推荐)东西

您可以使用File。listRoots()构建路径列表,在Linux / Unix中只有一个(/),在Windows中您需要决定哪个驱动器使用。然后代替硬编码文件分隔符(Linux / Unix上的\,Windows上的/等),获取特定于操作系统的文件。seperator

String file = File.listRoots()[0] +           //First root found
              File.seperator + "User" +       
              File.seperator + "Test" +       //This directory is easier to access with System.getProperty("user.home") though
              File.seperator + "Test01.jpg

答案 1 :(得分:0)

您可以保持路径可配置或将位置添加到类路径并使用Class.getResourceAsStream()加载文件

答案 2 :(得分:0)

您可以在电脑和膝盖上创建属性文件。它们中的每一个都包含适当的文件路径值。然后在代码中你可以这样做:

Properties prop = new Properties();
InputStream input = null;

try {
    input = new FileInputStream("config.properties");
    prop.load(input);

    String path = prop.getProperty("yourpath");

    // your code with reading and writing to files here

} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (input != null) {
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}