将文件用作URLClassLoader

时间:2016-05-05 01:31:11

标签: java classloader java-7 urlclassloader

我正在尝试编写一个可以从命令行传递任意文件的Java 1.7应用程序。该文件将被添加到ClassLoader中,以便可以将其用作资源。

将文件添加到URLClassLoader似乎有效,但是如何在添加到ClassLoader后将该文件作为资源获取?

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;

public class ClassLoaderTest {

  public static void main(String... args) throws MalformedURLException {

    File file = new File("/tmp/application.conf");
    URLClassLoader classLoader = new URLClassLoader(new URL[]{file.toURI().toURL()});
    System.out.println("ClassLoader URLs: " + Arrays.toString(classLoader.getURLs()));

    if (file.exists()) {
      System.out.println("File \"" + file.getAbsolutePath() + "\" exists!");
    } else {
      System.out.println("File \"" + file.getAbsolutePath() + "\" does not exist!");
      return;
    }

    URL url = classLoader.getResource(file.getAbsolutePath());

    System.out.println("File \"" + file.getAbsolutePath() + "\" as url: " + url);

    assert url != null;

  }
}

1 个答案:

答案 0 :(得分:2)

URLClassLoader仅支持jar文件和文件目录。所以有两种选择:

  1. 将您的资源放入jar文件并将该jar文件添加到RenderTexture myTexture = new RenderTexture (100, 100, 0); myTexture.Create (); transform.GetComponent<Renderer> ().material.mainTexture = myTexture; transform.GetComponent<Renderer> ().enabled = true;
  2. 将目录提供给类加载器,并使用该目录中文件的相对路径。