0

我正在尝试使用 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: 协议不支持输出错误。我不知道该怎么办。

4

1 回答 1

4

你不能写这样的资源。它是只读的。

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

找出资源的路径

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;
}

上面的方法为 a 找到一个文件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 ) );
}
于 2013-07-07T00:10:19.553 回答