Прочитать файл с помощью InputStream - PullRequest
0 голосов
/ 20 апреля 2020

Итак, у меня есть файл с одной строкой int: 5551212

Я пытаюсь использовать InputStream, чтобы прочитать этот файл, а затем посмотреть, могу ли я извлечь число, записанное в нем

Я сделал следующие шаги:

import java.io.*;

class Shuffle {


    public static void main(String args[]) throws IOException {
        FileInputStream newfile = new FileInputStream("file path");
        System.out.println(newfile.getChannel());
        System.out.println(newfile.getFD()); 
        System.out.println("Number of remaining bytes:"+newfile.available());
        int data;
        while ((data = newfile.read()) != -1) {
            System.out.print(data + " ");   
        }
        newfile.close();
    }  
}

Тем не менее, вывод, который я получил: 53, 53, 53, 49, 50, 49, 50

Я не совсем уверен, что это должно представлять или просто как использовать InputStream для целых чисел

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

При Java 11 или выше файл может быть прочитан с использованием одной строки кода - Files.readString

Вот рабочий пример для чтения текстового файла:

// File name:  ReadFile.java

import java.nio.file.*;

public class ReadFile {

    public static void main(String[] args) throws Exception {
        String path = "my-file.txt";
        // Read file content as a string
        System.out.println(Files.readString(Paths.get(path)));
    }
}

Вывод:

> javac ReadFile.java

> java ReadFile
   5551212
0 голосов
/ 20 апреля 2020

Вы читаете int, и файл представляет собой текстовые данные, а не двоичные. Следовательно, все байты в файле интерпретируются как двоичные, и вы получаете эти числа.

Для чтения из текстового файла вы можете либо использовать сканер, либо сначала читать как текст, а затем преобразовать в int.

import java.io.*;

class Shuffle {
    public static void main(String args[]) throws IOException {
        try (InputStream file = new FileInputStream("file.txt");
             InputStreamReader in = new InputStreamReader(file);
             BufferedReader r = new BufferedReader(in)) {
            String line = r.readLine();
            while (line != null) {
                int number = Integer.parseInt(line);
                System.out.println(number);
                line = r.readLine();
            }
        }
    }
 }  

Этот код также использует try-with-resources, который гарантирует, что все программы чтения и чтения будут закрыты в конце, даже если выдается исключение.

0 голосов
/ 20 апреля 2020

Файл, который вы читаете, является текстовым файлом, и, следовательно, получаемые вами байты представляют закодированные символы. Если вы посмотрите на таблицу ascii (например, http://www.asciitable.com/) на десятичное значение 53, вы увидите, что она соответствует символу "5"

...