powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Русская кодировка при чтении файла
18 сообщений из 18, страница 1 из 1
Русская кодировка при чтении файла
    #34139726
Кустов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток, возникла проблема при чтении русского текста из файла. Чтение файла провожу след образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
 package  fileproject;

 import  java.awt.*;
 import  java.awt.event.*;
 import  javax.swing.*;
 import  java.io.*;
 import  java.util.*;
 import  javax.swing.filechooser.FileFilter;
 import  org.jfree.ui.ExtensionFileFilter;

 public   class  choos  extends  JFrame
{
   File currentFile;
     JTextArea txt =  new  JTextArea( 10 , 40 );

   choos() {

     txt.setWrapStyleWord(true);
     txt.setLineWrap(true);

     setSize( 500 , 250 );
     Container c = getContentPane();
     JPanel base =  new  JPanel();
     JPanel p1   =  new  JPanel();
     JPanel p2   =  new  JPanel();
     JButton b1 =  new  JButton("Открыть");
     JButton b2 =  new  JButton("Записать");
     p1.add(b1);
     p1.add(b2);
     base.add(p1);

     JScrollPane scrl =  new  JScrollPane(txt,

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
     p2.add(scrl);
     base.add(p2);
     c.add(base);

     b1.addActionListener( new  ActionListener() {
          public   void  actionPerformed(ActionEvent e) {
            open();
         }
     });

WindowListener wndCloser =  new  WindowAdapter() {
       public   void  windowClosing(WindowEvent e) {
        System.exit( 0 );
      }
    };
    addWindowListener(wndCloser);


     setVisible(true);
   }

   public   void  open() {

    JFileChooser fc =  new  JFileChooser();
    fc.setCurrentDirectory( new  File("."));
    ExtensionFileFilter ff1 =  new  ExtensionFileFilter("txt", "*.txt — текстовые файлы");
    fc.addChoosableFileFilter(ff1);
    ExtensionFileFilter ff2 =  new  ExtensionFileFilter(".doc", "*.doc — документы Word");
    fc.addChoosableFileFilter(ff2);
     if ( fc.showOpenDialog( this ) == JFileChooser.APPROVE_OPTION) {
          File f = fc.getSelectedFile();
          currentFile = f;

           try 
           {
              FileInputStream inF =  new  FileInputStream(currentFile);
              //DataInputStream in = new DataInputStream(inF,"Cp866");
              BufferedReader in =  new  BufferedReader( new  InputStreamReader(inF,"Cp866"));

              String str = in.readLine();
              in.close();
              txt.append(str+"\n");
           }
           catch (IOException ex)
          {
              ex.printStackTrace();
          }

    }

  }


    public   static   void  main(String[] args) {
      new  choos();
   }
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//Вот собственно в этом коде что-то не так что ли!!!

JTextArea txt =  new  JTextArea( 10 , 40 );
FileInputStream inF =  new  FileInputStream(currentFile);
              //DataInputStream in = new DataInputStream(inF,"Cp866");
              BufferedReader in =  new  BufferedReader( new  InputStreamReader(inF,"Cp866"));

              String str = in.readLine();
              in.close();
              txt.append(str+"\n");

1)Но русская кодировка не выводится ! Что делать ?
2) Еще не распознаются файлы привиденных форматов txt и doc почему-то они в каталоге есть однако фильтр их не видит, видит только All Files
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34139841
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вижу пример Вы отсюда брали. Там есть реализация фильтров, а Вы юзаете фильтр стороннего производителя

Код: plaintext
 import  org.jfree.ui.ExtensionFileFilter;

Теперь насчет кодировки. Не понятно почему Cp866. Попробуйте Cp1251 и все замечательно распознается, я бы вообще не указывал бы ее.

Вот исправленный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
 import  javax.swing.*;

 import  java.awt.*;
 import  java.awt.event.*;

 import  java.io.*;


 public   class  choos  extends  JFrame {
    File currentFile;
    JTextArea txt =  new  JTextArea( 10 ,  40 );

     public  choos() {
        txt.setWrapStyleWord(true);
        txt.setLineWrap(true);

        setSize( 500 ,  250 );
        Container c = getContentPane();
        JPanel base =  new  JPanel();
        JPanel p1 =  new  JPanel();
        JPanel p2 =  new  JPanel();
        JButton b1 =  new  JButton("Открыть");
        JButton b2 =  new  JButton("Записать");
        p1.add(b1);
        p1.add(b2);
        base.add(p1);

        JScrollPane scrl =  new  JScrollPane(txt, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        p2.add(scrl);
        base.add(p2);
        c.add(base);

        b1.addActionListener( new  ActionListener() {
             public   void  actionPerformed(ActionEvent e) {
                open();
            }
        });

        WindowListener wndCloser =  new  WindowAdapter() {
             public   void  windowClosing(WindowEvent e) {
                System.exit( 0 );
            }
        };
        addWindowListener(wndCloser);

        setVisible(true);
    }

     public   void  open() {
        JFileChooser fc =  new  JFileChooser();
        fc.setCurrentDirectory( new  File("."));
        ExtFileFilter ff1 =  new  ExtFileFilter("txt", "*.txt — текстовые файлы");
        fc.addChoosableFileFilter(ff1);
        ExtFileFilter ff2 =  new  ExtFileFilter(".doc", "*.doc — документы Word");
        fc.addChoosableFileFilter(ff2);
         if  (fc.showOpenDialog( this ) == JFileChooser.APPROVE_OPTION) {
            currentFile = fc.getSelectedFile();
             try  {
                FileInputStream inF =  new  FileInputStream(currentFile);
                //DataInputStream in = new DataInputStream(inF,"Cp866");
                BufferedReader in =  new  BufferedReader( new  InputStreamReader(inF, "Cp1251"));

                String str = in.readLine();
                in.close();
                txt.append(str + "\n");
            }  catch  (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

     class  ExtFileFilter  extends  javax.swing.filechooser.FileFilter {
        String ext;
        String description;

        ExtFileFilter(String ext, String descr) {
             this .ext = ext;
            description = descr;
        }

         public   boolean  accept(File f) {
             if  (f !=  null ) {
                 if  (f.isDirectory()) {
                     return  true;
                }
                String extension = getExtension(f);
                 if  (extension ==  null )
                     return  (ext.length() ==  0 );
                 return  ext.equals(extension);
            }
             return  false;
        }

         public  String getExtension(File f) {
             if  (f !=  null ) {
                String filename = f.getName();
                 int  i = filename.lastIndexOf('.');
                 if  (i >  0  && i < filename.length() -  1 ) {
                     return  filename.substring(i +  1 ).toLowerCase();
                }
            }
             return   null ;
        }

         public  String getDescription() {
             return  description;
        }
    }

     public   static   void  main(String[] args) {
         new  choos();
    }
    
}
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34139976
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кустов
2) Еще не распознаются файлы привиденных форматов txt и doc почему-то они в каталоге есть однако фильтр их не видит, видит только All Files
Скорее всего, дело с заглавными буквами. Не ленитесь и напишите фильтр сами. Будет полезно.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34140088
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один баг. Неправильно задано расширение

Код: plaintext
ExtFileFilter ff2 =  new  ExtFileFilter(".doc", "*.doc — документы Word");

Исправьте на

Код: plaintext
ExtFileFilter ff2 =  new  ExtFileFilter("doc", "*.doc — документы Word");


Для того, чтобы прочитать весь файл, а не одну строку нужно сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     try  {
        FileInputStream inF =  new  FileInputStream(currentFile);
        //DataInputStream in = new DataInputStream(inF,"Cp866");
        BufferedReader in =  new  BufferedReader( new  InputStreamReader(inF));

        String str = "";
         while  ((str = in.readLine()) !=  null ) {
            txt.append(str + "\n");
        }

        in.close();
    }  catch  (IOException ex) {
        ex.printStackTrace();
    }


P.S.: Для чтения doc-файлов Вам нужно использовать спец. средства. Вышеуказанным образом можно читать только текстовые файлы, а word-файлы имеют свой формат.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34140581
Кустов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пасибо большое, все получилось.
А может поясните вот как сделать что-то типа импорта файла, в файле у меня будут записаны ключевые слова в квадратных скобочках, и нужно считывать и сохранять строки строки сразу после них, т.е
------Файл 1.txt
[Фамилия]
Иванов
[Телефон]
2-435-24
[Хобби]
Люблю погулять с собакой
и попить чай
[Пол]
мужской


Т.е я хочу чтобы соответствующие поля считанные вставлялись в соответствующие JTextField-ы
Например, считываю я первую строку - там Фамилия, значит след. строку нужно записать в текстовое поле Family


Может у кого есть методы получше как организовать импорт подобного файла?
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34140686
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зарплату мне на Yandex-кошелек переведете? ;)
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34140784
Кустов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А помочь за просто так невозможно ?
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142054
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чем тут Java? Вы не можете составить простейший алгоритм чтения из файла?
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142148
Кустов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уверен, что ты это сделать не сможешь. Снобизма много, а толку мало.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142168
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будь уверен :)

Подумайте сами.
1. Вам нужно найти начало некоторой секции. Например, читая файл построчно и сравнивая с заданным значением.
2. Читать все строки далее и обрабатывать их до конца секции, а ей может быть либо конец файла, либо начало следующей секции, либо специально заданный тэг конца.

Итого: Вам нужно знать IO API, как сравнивать строки и элементарные знания по алгоритмике.

Проблемы, которые могут возникнуть: если есть несколько одинаковых секций, тогда их придется искать все.

P.S. Можете посмотреть в сторону формата XML, но честно говоря слово модное, а использование здесь не особо то и оправдано, работать с простым текстовиком легче.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142170
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ах да.. и ознакомьтесь наконец с Java Code Conventions, найдите их сами на java.sun.com. Лучше привыкать сразу к хорошему оформлению, чем потом переучиваться. Тем более, что неправильное оформление сбивает с толку людей, которые читают ваш код.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142175
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КустовМожет у кого есть методы получше как организовать импорт подобного файла?

Либо парсить файл вручную (что не очень эффективно), либо посмотрите в сторону класса

Код: plaintext
Properties
Только там ключи и значения немного по другому записываются:

КЛЮЧ=ЗНАЧЕНИЕ

т.е. в вашем случае

ФАМИЛИЯ=Иванов

и т.п.

А вообще, самое лучшее - использовать XML и парсер (DOM, JDOM, SAX и т.п.)
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142208
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КустовЯ уверен, что ты это сделать не сможешь. Снобизма много, а толку мало.
Да, сложная задача. Надо срочно менять тему диплома на "Разбора файла текстового с определенной известной структурой"
Проблема в том, что это не совсем тот вопрос, на которые хотелось бы ответить в форуме (по крайне мере, мне). Потому как требуется решить задачу, а не помочь вам решить ее. Да и задача тривиальная, таких даже я (еще студент) решал не раз и не два. Не интересно.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142232
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот-вот. Человек приходит и кричит: "Дайте готовый код!". На предложение слегка подумать над довольно легкой задачей: "Вы ее сами не решите. Много понтов и снобизма!". Причем утверждение взято слегка с потолка. Вот желание помогать таким сразу пропадает.

2 Автор трэда:
Вы читали мои сообщения на этом форуме? Или на других форумах?
Я конечно программист-любитель и считаю, что знаю весьма немного, но с некоторым кругом задач справляюсь весьма успешно.

А теперь напишу, зачем я здесь сижу. Чтобы получать вопросы и пытаться на них ответить. Тем самым я дополнительно развиваюсь, потому что на форуме обсуждают гораздо более широкий круг задач, чем тот, что я решаю сам.
Поэтому мне важно, чтобы вопрос был интересным. Пока знаний у меня немного, мне интересны многие вопросы, но когда человек спрашивает вопрос на уровне элементарной алгоритмики, которую он должен был пройти еще в школе, спрашивается: "Зачем он вообще взялся за эту задачу?".
Процитирую одного форумчанина с juga.ru: "За задачу стоит браться только если множество ответов, которые вы готовы дать, не сильно меньше множества вопросов, которые вы получите."

И поэтому я могу весьма грубо ответить, если вопрос ну уж слишком простой вроде "Что такое CLASSPATH? Как запустить приложение из командной строки? Как подключить библиотеку?" и в таком стиле.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142278
Кустов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как тебе сказать, сложно в 36 браться за программирование, сам я работаю совсем в другой области, а это так помаленьку постигаю. Или таким как я здесь запрещено отвечать ?
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142280
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не запрещено. Просто вам же лучше учиться самому, а не просить готовый код.

Я принимаю для себя следующую философию: http://skipy.dev.juga.ru/philosophy/learning.html

Прочтите на досуге, вещи там довольно очевидные и не новые описаны.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142281
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КустовНу как тебе сказать, сложно в 36 браться за программирование, сам я работаю совсем в другой области, а это так помаленьку постигаю. Или таким как я здесь запрещено отвечать ?
Отвечать разрешено, но делать достаточно элементарные задания целиком и полностью никто за Вас не будет.
Насчет разбора такого файла - решается просто. Создается BufferedReader и файл считывается построчно. Проверяется, построена ли очередная строка по шаблону вроде "[\\w+]" (лучше с помощью Pattern, а не String.matches()), если да - извлекаем содержание строки и находим ассоциированный с данным заголовком раздела JTextField (например, через создающийся при запуске программы HashMap<String, JTextField>), все последующие строки пишем в этот филд, пока не найдем следующий заголовок раздела или не дойдем до конца файла. Построчно уж не буду, и так все разжевал.
...
Рейтинг: 0 / 0
Русская кодировка при чтении файла
    #34142284
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькое добавление:
По-хорошему лучше не сразу заносить все в соответствующие компоненты, а создать некоторую модель данных, описав сущность Person.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Русская кодировка при чтении файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]