Захват данных, прочитанных из файла в поток строк Java - PullRequest
1 голос
/ 26 марта 2010

Я из C ++, так что будьте добры с моими n00bish запросами ...

Я бы хотел прочитать данные из входного файла и сохранить их в потоке строки. Я могу сделать это простым способом в C ++, используя stringstreams. Я немного растерялся, пытаясь сделать то же самое в Java.

Ниже приведен грубый код / ​​способ, который я разработал для хранения данных, считываемых построчно в строковом массиве. Мне нужно использовать поток строк для захвата моих данных (а не использовать массив строк). Любая помощь?

    char dataCharArray[] = new char[2];
    int marker=0;
    String inputLine;
    String temp_to_write_data[] = new String[100];

    // Now, read from output_x into stringstream

    FileInputStream fstream = new FileInputStream("output_" + dataCharArray[0]);

    // Convert our input stream to a BufferedReader
    BufferedReader in = new BufferedReader (new InputStreamReader(fstream));

    // Continue to read lines while there are still some left to read
    while ((inputLine = in.readLine()) != null )
    {
        // Print file line to screen
        // System.out.println (inputLine);
        temp_to_write_data[marker] = inputLine;
        marker++;
    }

EDIT:

Я думаю, что я действительно хотел StringBuffer. Мне нужно прочитать данные из файла (возможно, в StringBuffer) и записать / перенести все данные обратно в другой файл.

Ответы [ 4 ]

1 голос
/ 26 марта 2010

В Java первое предпочтение всегда следует отдавать покупке кода в библиотеках:

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html

Короче, то, что вам нужно, это:

FileUtils.readFileToString(File file)
0 голосов
/ 15 августа 2013

Я также пришел из C ++, и я искал класс, похожий на C ++ 'StringStreamReader', но я не смог его найти. В моем случае (который я считаю очень простым) я пытался прочитать файл построчно, а затем прочитать строку и целое число из каждой из этих строк. Мое окончательное решение состояло в том, чтобы использовать два объекта класса java.util.Scanner, чтобы я мог использовать один из них для чтения строк файла непосредственно в строку и использовать второй для повторного чтения содержимого каждой строки. (теперь в строке) к переменным (новая строка и положительное int). Вот мой код:

try {
    //"path" is a String containing the path of the file we want to read
    Scanner sc = new Scanner(new BufferedReader(new FileReader(new File(path))));
    while (sc.hasNextLine()) { //while the file isn't over
        Scanner scLine = new Scanner(sc.nextLine());
        //sc.nextLine() returns the next line of the file into a String
        //scLine will now proceed to scan (i.e. analyze) the content of the string
        //and identify the string and the positive 'int' (what in C++ would be an 'unsigned int')
        String s = scLine.next(); //this returns the string wanted
        int x;
        if (!scLine.hasNextInt() || (x = scLine.nextInt()) < 0) return false;
        //scLine.hasNextInt() analyzes if the following pattern can be interpreted as an int
        //scLine.nextInt() reads the int, and then we check if it is positive or not
        //AT THIS POINT, WE ALREADY HAVE THE VARIABLES WANTED AND WE CAN DO
        //WHATEVER WE WANT WITH THEM
        //in my case, I put them into a HashMap called 'hm'
        hm.put(s, x);
    }
    sc.close();
    //we finally close the scanner to point out that we won't need it again 'till the next time
} catch (Exception e) {
    return false;
}
return true;

Надеюсь, это помогло.

0 голосов
/ 26 марта 2010

Вы просто хотите прочитать файл и написать еще один:

BufferedInputStream in = new BufferedInputStream( new FileInputStream( "in.txt" ) );
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream( "out.txt" ) );
int b;
while ( (b = in.read()) != -1 ) {
    out.write( b );
}

Если вы хотите прочитать файл в строку:

StringWriter out = new StringWriter();
BufferedReader in = new BufferedReader( new FileReader( "in.txt" ) );
int c;
while ( (c = in.read()) != -1 ) {
    out.write( c );
}
StringBuffer buf = out.getBuffer();

Это можно сделать более эффективным, если вы читаете с использованием байтовых массивов. Но я рекомендую вам использовать отличный Apache Common-IO. IOUtils (http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html) сделает цикл за вас.

Кроме того, вы должны помнить, чтобы закрыть потоки.

0 голосов
/ 26 марта 2010

StringBuffer - это один ответ, но если вы просто записываете его в другой файл, вы можете просто открыть OutputStream и записать его прямо в другой файл.Хранение целого файла в памяти, вероятно, не очень хорошая идея.

...