krembrule2016
@krembrule2016

Как правильно читать и преобразовывать содержимое текстового файла?

Доброе время суток!
Столкнулся с проблемой преобразования содержимого текстового файла. Непосредственно в сам файл никаких изменений вносить не требуется.
Print result = () -> {    
        try(FileReader text = new FileReader("C:\\text.txt")) {
            
            while(( c = text.read()) != -1)
            {
                y += 1;
                
            }
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
            return 0;
        }
        return y;
    };

Таким образом я читаю файл и распечатываю в консоль его содержимое. (Выводятся кракозябры, но сейчас не об этом) В идеале, мне нужно, чтобы содержимое еще и записывалось в массив символов, но в этом то и проблема. Чтобы создать массив char[] необходимо знать его размер, мне бы хотелось создавать переменную с необходимым размером. Именно для этого я в переменной y подсчитываю количество символов в файле.
Потом я создаю массив нужного мне размера
char[] a = new char[(int)result.Printer()-1];
Чтобы наполнить его символами из текстового файла, как мне кажется, необходимо повторно использовать подход из куска с подсчетом, но вот здесь возникают проблемы:
while(( c = text.read()) != -1)
            {
                y += 1;
                char[] a = c; Вот тут возникает ошибка
                char[] a = (char)c; Так тоже не выходит
                а как надо?
            }

Я вообще в правильном направлении двигаюсь? Может сразу сделать массив заведомо большего размера? Однако, даже при таком подходе я столкнусь с той же проблемой типов...
  • Вопрос задан
  • 1245 просмотров
Решения вопроса 2
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
public static void main(String[] args) {
        System.err.print(Arrays.toString(test()));
    }
    private static char[] test(){  
        StringBuilder sb = new StringBuilder();
        try( BufferedReader br = new BufferedReader(new FileReader("D:\\text.txt"))) {
            String str;
            while( (str = br.readLine()) != null){
                sb.append(str);
            }
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
           return sb.toString().toCharArray();
        }
       return sb.toString().toCharArray();
    }
}

Вывод:
run:
[a, s, d, a, s, f, g, a, s, f, d, a, s, d, s, d, g, s, d, g, a, d, f, h, b, s, a, b, w, 4, q, g, , g, 3, , t, , 3, g, , 3, g, 3, g, , , g, r, v, 3]
Ответ написан
Комментировать
@OniSpX
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
File file = new File(args[0]);
if (!file.exists()) {
System.out.println(args[0] + " does not exist.");
return;
}
if (!(file.isFile() && file.canRead())) {
System.out.println(file.getName() + " cannot be read from.");
return;
}
try {
FileInputStream fis = new FileInputStream(file);
char current;
while (fis.available() > 0) {
current = (char) fis.read();
System.out.print(current);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

//пример взят отсюда: ru.stackoverflow.com/questions/310036/%D0%A1%D1%87...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Atllantis
ужс...
Не знаю что Вы хотите и как "работает" Ваш код, но не проще ли прочитать всё в строку и из строки получить массив чаров (как вариант)?
Ответ написан
@private_tm
JAVA dev
Вот компактная, надежная идиома для Java 7, завернутая в метод:
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;

public class Main {
    public static void main(String agrg[]) throws IOException{
        String content = readFile("test.txt", StandardCharsets.UTF_8);
        System.out.println(content);
    }
    
    static String readFile(String path, Charset encoding) 
      throws IOException 
    {
      byte[] encoded = Files.readAllBytes(Paths.get(path));
      return new String(encoded, encoding);
    }
}


Источник stackoverflow.com/questions/326390/how-do-i-create...

Проверил и протестил работает.

Для того чтобы перевести String в массив char[] достаточно добавить в main()
char[] symbols = content.toCharArray();
    //проверка
    for(char ch : symbols)
        System.out.println(ch);

как упоминал уже Atllantis и Дмитрий Александров да и у меня это сразу же напрашивалось.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы