Используется для чтения текстового файла ресурса в строку (Java) - PullRequest
187 голосов
/ 20 мая 2011

Существует ли какая-либо утилита, которая помогает читать текстовый файл ресурса в строку.Я полагаю, это популярное требование, но я не смог найти никакой утилиты после Google.

Ответы [ 20 ]

2 голосов
/ 31 августа 2016

Я использую следующее для чтения файлов ресурсов из classpath:

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.Scanner;

public class ResourceUtilities
{
    public static String resourceToString(String filePath) throws IOException, URISyntaxException
    {
        try (InputStream inputStream = ResourceUtilities.class.getClassLoader().getResourceAsStream(filePath))
        {
            return inputStreamToString(inputStream);
        }
    }

    private static String inputStreamToString(InputStream inputStream)
    {
        try (Scanner scanner = new Scanner(inputStream).useDelimiter("\\A"))
        {
            return scanner.hasNext() ? scanner.next() : "";
        }
    }
}

Сторонние зависимости не требуются.

2 голосов
/ 20 мая 2011

Используйте FileUtils Apache commons. У него есть метод readFileToString

1 голос
/ 20 июля 2018
package test;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            String fileContent = getFileFromResources("resourcesFile.txt");
            System.out.println(fileContent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //USE THIS FUNCTION TO READ CONTENT OF A FILE, IT MUST EXIST IN "RESOURCES" FOLDER
    public static String getFileFromResources(String fileName) throws Exception {
        ClassLoader classLoader = Main.class.getClassLoader();
        InputStream stream = classLoader.getResourceAsStream(fileName);
        String text = null;
        try (Scanner scanner = new Scanner(stream, StandardCharsets.UTF_8.name())) {
            text = scanner.useDelimiter("\\A").next();
        }
        return text;
    }
}
1 голос
/ 30 сентября 2016

Вот мой подход работал нормально

public String getFileContent(String fileName) {
    String filePath = "myFolder/" + fileName+ ".json";
    try(InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)) {
        return IOUtils.toString(stream, "UTF-8");
    } catch (IOException e) {
        // Please print your Exception
    }
}
0 голосов
/ 25 октября 2018

Если вы включите гуаву, то вы можете использовать:

String fileContent = Files.asCharSource(new File(filename), Charset.forName("UTF-8")).read();

(Другие решения упоминали другой метод для гуавы, но они устарели)

0 голосов
/ 05 сентября 2018

По крайней мере, начиная с Apache commons-io 2.5, метод IOUtils.toString () поддерживает аргумент URI и возвращает содержимое файлов, расположенных внутри jar-файлов в classpath:

0 голосов
/ 08 декабря 2017

Я написал readResource () методы здесь , чтобы иметь возможность сделать это одним простым вызовом.Это зависит от библиотеки Guava, но мне нравятся методы только для JDK, предложенные в других ответах, и я думаю, что я изменю их таким образом.

0 голосов
/ 24 февраля 2012

Гуава также имеет Files.readLines(), если вы хотите, чтобы возвращаемое значение было List<String> построчно:

List<String> lines = Files.readLines(new File("/file/path/input.txt"), Charsets.UTF_8);

Пожалуйста, обратитесь к здесь , чтобы сравнить 3 способа (BufferedReader против Files Гуавы против Resources Гуавы), чтобы получить String из текстового файла.

0 голосов
/ 28 августа 2016

С набором статических импортов решение Guava может быть очень компактным, однострочным:

toString(getResource("foo.txt"), UTF_8);

Требуется следующий импорт:

import static com.google.common.io.Resources.getResource
import static com.google.common.io.Resources.toString
import static java.nio.charset.StandardCharsets.UTF_8
0 голосов
/ 12 августа 2016
public static byte[] readResoureStream(String resourcePath) throws IOException {
    ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
    InputStream in = CreateBffFile.class.getResourceAsStream(resourcePath);

    //Create buffer
    byte[] buffer = new byte[4096];
    for (;;) {
        int nread = in.read(buffer);
        if (nread <= 0) {
            break;
        }
        byteArray.write(buffer, 0, nread);
    }
    return byteArray.toByteArray();
}

Charset charset = StandardCharsets.UTF_8;
String content = new   String(FileReader.readResoureStream("/resource/...*.txt"), charset);
String lines[] = content.split("\\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...