用Java写入资源?

时间:2013-07-06 22:46:52

标签: java resources

我正在尝试使用Class.getResource()方法将数据保存到计算机上的文件中。问题是它返回一个URL。我找不到使用url写入文件的方法。这是我到目前为止的代码:

url = getClass().getResource("save.txt");
URLConnection urlconn = url.openConnection();
OutputStream os = urlconn.getOutputStream();
OutputStreamWriter isr = new OutputStreamWriter(os);
buffer = new BufferedWriter(isr);

当我跑步时,我得到一个     java.net.UnknownServiceException:协议不支持输出  错误。我不知道该怎么做。

1 个答案:

答案 0 :(得分:3)

你不能写这样的资源。这意味着只读。

另一方面,您可以找到资源文件的路径。 其中一种方法可能是:

找出资源的路径

public static File findClassOriginFile( Class cls ){
    // Try to find the class file.
    try {
        final URL url = cls.getClassLoader().getResource( cls.getName().replace('.', '/') + ".class");
        final File file = new File( url.getFile() ); // toString()
        if( file.exists() )
            return file;
    }
    catch( Exception ex ) { }

    // Method 2
    try {
        URL url = cls.getProtectionDomain().getCodeSource().getLocation();
        final File file = new File( url.getFile() ); // toString()
        if( file.exists() )
            return file;
    }
    catch( Exception ex ) { }

    return null;
}

上述方法查找Class的文件,但也可以轻松更改为资源。

我建议将资源用作默认资源,将其从类路径复制到某个工作目录并保存在那里。

将资源复制到目录

public static void copyResourceToDir( Class cls, String name, File dir ) throws IOException {
    String packageDir = cls.getPackage().getName().replace( '.', '/' );
    String path = "/" + packageDir + "/" + name;
    InputStream is = GroovyClassLoader.class.getResourceAsStream( path );
    if( is == null ) {
        throw new IllegalArgumentException( "Resource not found: " + packageDir );
    }
    FileUtils.copyInputStreamToFile( is, new File( dir, name ) );
}