java jar nio2

java - equivalente a Files.readAllLines() para InputStream o Reader?



jar nio2 (2)

Puede usar Apache Commons IOUtils#readLines :

List<String> doc = IOUtils.readLines(inputStream, StandardCharsets.UTF_8);

Tengo un archivo que he estado leyendo en una Lista a través del siguiente método:

List<String> doc = java.nio.file.Files.readAllLines(new File("/path/to/src/resources/citylist.csv").toPath(), StandardCharsets.UTF_8);

¿Hay alguna forma agradable (de una sola línea) de Java 7/8 / nio2 de obtener la misma dote con un archivo que esté dentro de un Jar ejecutable (y presumiblemente, se debe leer con InputStream)? ¿Tal vez una forma de abrir un InputStream a través del cargador de clases y luego forzarlo / transformarlo / envolverlo en un objeto Path? ¿O alguna nueva subclase de InputStream o Reader que contenga un equivalente a File.readAllLines (...)?

Sé que podría hacerlo de forma tradicional en media página de código, o mediante alguna biblioteca externa ... pero antes de hacerlo, quiero asegurarme de que las versiones recientes de Java no puedan hacerlo "de inmediato". ".


Un InputStream representa un flujo de bytes. Esos bytes no necesariamente forman contenido (texto) que puede leerse línea por línea.

Si sabe que InputStream puede interpretarse como texto, puede envolverlo en InputStreamReader y usar BufferedReader#lines() para consumirlo línea por línea.

try (InputStream resource = Example.class.getResourceAsStream("resource")) { List<String> doc = new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8)).lines().collect(Collectors.toList()); }