Проблемы с кодировками Java

178
01 марта 2019, 06:50

Имеются файлы с кириллицей в названии и возможно в содержимом файлов. Кодировка файлов windows-1251 (при этом кодировка файла исходника UTF-8, но его изменение ничего не меняет... может оно и не должно чего-либо менять, но для меня это пока темный лес). Программа корректно считывает данные, но при этом выдает ошибки следующего типа:

D:\Projects\DataPreparation_DataBase_To_Petrel\U_AGAN_BV8\incl\source\1Р’_0.las (Не удается найти указанный файл) ...Завершение записи файла: output.incl

package incl;
import gis.Lister;
import java.beans.Encoder;
import java.io.*;
import java.util.Locale;
import java.util.*;
import java.util.stream.BaseStream;
public class IncFile extends File {
    ArrayList<String> incData = new ArrayList<>();
    public IncFile(File sourceFile){
        super(sourceFile.getAbsolutePath());
    }
    public String getWellName() throws NullPointerException {
        String curLine = "";
        try (Scanner sc = new Scanner(new File(this.getAbsolutePath()), "windows-1251")) {
            while (sc.hasNextLine()) {
                //считывание строки
                curLine = sc.nextLine();
                System.out.println(curLine);
                //проверка строки на соответствие паттерну
                if (curLine.matches("^.*(Well|WELL|well)\\t*\\s*:.*")) {
                    curLine = curLine.replaceAll(".*:\\s*\\t*", "");
                    System.out.println(curLine);
                    break;
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println(ex.getMessage());
        } finally {
            return curLine;
        }
    }
    public void writeOutputFile() throws IOException {
        File incFile = new File(this.getParent() + "\\" + "output" + ".incl");
        BufferedWriter incFile_writer = new BufferedWriter(new FileWriter(incFile.getAbsolutePath()));
        //получаем список всех файлов инклинометрий
        Lister lister = new Lister(this.getParent(), "las");
        File[] incFiles = lister.getFiles(); //работает
        for (File f : incFiles) {
            incFile_writer.write("WELL: " + this.getWellName() + "\n");
            incFile_writer.write("#SOURCE_FILE: " + this.getAbsolutePath() + "\n");
            this.getTheInclData(f);
            for (String str : incData) {
                incFile_writer.write(str + "\n");
            }
            incData.clear();
        }
        incFile_writer.close();
        System.out.println("...Завершение записи файла: "+incFile.getName());
    }
    public void getTheInclData(File f) throws FileNotFoundException {
        Scanner f_sc = new Scanner(f, "windows-1251");
        String curLine;
        outer: while (f_sc.hasNext()) {
            curLine = f_sc.nextLine();
            if (curLine.toUpperCase().matches(".*~ASCII.*")) {
                break outer;
            }
        }
        String[] tmpArray;
        outer: while (f_sc.hasNext()) {
            curLine = f_sc.nextLine();
            if (curLine.startsWith("#")) continue outer;
            else {
                tmpArray = curLine.trim().split("\\s+|\\t+");
                incData.add(tmpArray[0].concat("\t").concat(tmpArray[1]).concat("\t").concat(tmpArray[2]));
            }
        }
        f_sc.close();
    }
}
READ ALSO
Приложение крашиться при запуске из BroadcastReceiver

Приложение крашиться при запуске из BroadcastReceiver

Вот код автозапуска службыКод срабатывает видно по логам

144
Как использовать Spring контроллер без JSP?

Как использовать Spring контроллер без JSP?

Поставили задачу, написать задание с использованием Spring контроллера (Простая форма ввода сообщения, сохранения, вывода сообщения и тд

163