Cómo cargar / referenciar un archivo como una instancia de archivo desde classpath

Tengo un archivo que está en mi classpath, por ejemplo, com/path/to/file.txt . Necesito cargar o hacer referencia a este archivo como un objeto java.io.File . El es porque necesito acceder al archivo usando java.io.RandomAccessFile (el archivo es grande, y necesito buscar un cierto desplazamiento de bytes). es posible? Los constructores para RandomAccessFile requieren una instancia de File o cadena (ruta).

Si hay otra solución para buscar un cierto offset de bytes y leer la línea, estoy abierto a eso también.

Intenta conseguir una URL para tu recurso classpath:

 URL url = this.getClass().getResource("/com/path/to/file.txt") 

Luego crea un archivo usando el constructor que acepta un URI:

 File file = new File(url.toURI()); 

Esto también funciona, y no requiere una conversión de URI / path / to / file. Si el archivo está en classpath, esto lo encontrará.

 File currFile = new File(getClass().getClassLoader().getResource("the_file.txt").getFile()); 

Encuentro este código de una sola línea como el más eficiente y útil:

 File file = new File(ClassLoader.getSystemResource("com/path/to/file.txt").getFile()); 

Funciona de maravilla.

O use directamente el InputStream del recurso usando la ruta absoluta CLASSPATH (comenzando con el carácter / slash):

getClass().getResourceAsStream("/com/path/to/file.txt");
getClass().getResourceAsStream("/com/path/to/file.txt"); 

O ruta CLASSPATH relativa (cuando la clase que está escribiendo está en el mismo paquete Java que el archivo de recursos en sí, es decir, com.path.to ):

getClass().getResourceAsStream("file.txt");
getClass().getResourceAsStream("file.txt");