Доп файл открывается со сбитой кодировкой Java
пишу программу для обработки текста, вводим текст и в новом окошке выводится форматированный результат, сначала была проблема с кодировкой и файл не хотел запускаться, я ее пофикил но теперь кодировка сбита в файле.
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.awt.TextArea;
public class raz extends JFrame {
private final JTextArea areatext;
ArrayList<String> list = new ArrayList<>(); // Ну мы ведь серьёзные кодеры и понимаем что массив не лучшая идея, будем использовать коллекцию
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
raz frame = new raz();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public raz() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 430, 200);
JPanel contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
areatext = new JTextArea();
JScrollPane jsp = new JScrollPane(areatext);
areatext.setBounds(20, 11, 370, 60);
contentPane.add(areatext);
areatext.setPreferredSize(new Dimension(5, 5));
areatext.setLineWrap(true);
JTextArea rezult = new JTextArea();
JFrame frame = new JFrame("Результат");
JButton btnNewButton = new JButton("\u0421\u0447\u0438\u0442\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442");
// Для того чтоб всё читать нужно чтоб чтото дало команду СТАРТ, или ПОЕХАЛИ, в ашем случае
// Тыкнем кнопку и всё заработает
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int IzYes = 0;
String ezz = "ИЗ";
String[] secret = new String[4];
secret[0] = "НС";
secret[1] = "ДДД";
secret[2] = "SECRET";
secret[3] = "SS";
String[] personal = new String[2];
personal[0] = "МНЕ";
personal[1] = "ТОЛЬКО МНЕ";
String[] speed = new String[2];
speed[0] = "БЫСТРО";
speed[1] = "ОЧЕНЬ БЫСТРО";
list.add(areatext.getText()); // добавлять данные
// Отображаем данные на экране
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
String line;
// Записываем данные в файл
try {
Files.write(Paths.get("demo.txt"), list, StandardOpenOption.CREATE);
} catch (IOException e) {
e.printStackTrace();
}
// Чтениение файла
try (BufferedReader br = new BufferedReader(new FileReader("demo.txt"))) {
//чтение построчно
while ((line = br.readLine()) != null) {
String Str = line.toUpperCase();
// Поиск Из
while (IzYes == 0) {
boolean isIz = Str.contains(ezz);
int deletePosition = Str.lastIndexOf(ezz);
list.clear();
if (isIz) {
Str = Str.substring(deletePosition);
list.add(Str);
System.out.println(Str);
IzYes = 1;
break;
}else
Str = Str.substring(0,0);
if (Str.isBlank()){
break;}
}
while (IzYes == 1) {
for (int x = 0; x < 4; x++) {
list.clear();
boolean isSecret = Str.contains(secret[x]);
if (isSecret) {
System.out.println("Строка х: " + x);
System.out.println(secret[x]);
Str = Str.replaceFirst("(\\s*)" + secret[x], " " + secret[x]);
list.add(Str);
System.out.println((Str));
IzYes = 2;
break;
}
if (x == 3){
IzYes = 2;
list.add(Str);
}
}
for (int z = 0; z < 2; z++) {
list.clear();
boolean isPerson = Str.contains(personal[z]);
if (isPerson) {
System.out.println("Строка п: " + z);
System.out.println(personal[z]);
Str = Str.replaceFirst("(\\s*)" + personal[z], " " + personal[z]);
list.add(Str);
System.out.println((Str));
IzYes = 2;
break;
}
if (z == 1){
IzYes = 2;
list.add(Str);
}
}
for (int c = 0; c < 2; c++) {
boolean isSpeed = Str.contains(speed[c]);
list.clear();
if (isSpeed) {
System.out.println("Строка: " + c);
System.out.println(speed[c]);
Str = Str.replaceFirst("(\\s*)" + speed[c], " " + speed[c]);
list.add(Str);
System.out.println((Str));
IzYes = 2;
break;
}
if (c == 1){
IzYes = 2;
list.add(Str);
}
}
}
if (IzYes != 0) {
SwingUtilities.invokeLater(() ->
{
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
rezult.append(iterator.next().toString() + '\n');
}
frame.add(new JScrollPane(rezult));
frame.setSize(700, 400);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
} catch (IOException e) {
}
// Удаление файла
File file = new File("demo.txt");
if (file.delete()) {
System.out.println("demo.txt файл был удален с корневой папки проекта");
} else System.out.println("Файл demo.txt не был найден в корневой папке проекта");
}
}
});
btnNewButton.setBounds(45, 105, 320, 30);
contentPane.add(btnNewButton);
}
}
C:\Users\Demon\IdeaProjects\main\src>java main
demo.txt С?айР? Р?С?Р? С?Р?Р°Р?Р?Р? С? РєР?С?Р?Р?Р?Р?Р№ папки РїС?Р?Р?РєС?Р°
вввв
из Москвы ддд
Что теперь может быть не так?(
Ответы (1 шт):
Автор решения: pitstt
→ Ссылка
Попробуйте запись в файл с указанием кодировки
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8));
bufferedWriter.write(new String());
bufferedWriter.flush();