Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Русская кодировка при чтении файла / 18 сообщений из 18, страница 1 из 1
20.11.2006, 03:37:49
    #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
20.11.2006, 08:41:36
    #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
20.11.2006, 09:52:19
    #34139976
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Русская кодировка при чтении файла
Кустов
2) Еще не распознаются файлы привиденных форматов txt и doc почему-то они в каталоге есть однако фильтр их не видит, видит только All Files
Скорее всего, дело с заглавными буквами. Не ленитесь и напишите фильтр сами. Будет полезно.
...
Рейтинг: 0 / 0
20.11.2006, 10:32:25
    #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
20.11.2006, 12:41:16
    #34140581
Кустов
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Русская кодировка при чтении файла
Пасибо большое, все получилось.
А может поясните вот как сделать что-то типа импорта файла, в файле у меня будут записаны ключевые слова в квадратных скобочках, и нужно считывать и сохранять строки строки сразу после них, т.е
------Файл 1.txt
[Фамилия]
Иванов
[Телефон]
2-435-24
[Хобби]
Люблю погулять с собакой
и попить чай
[Пол]
мужской


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


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

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

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

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

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

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

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

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

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

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

и т.п.

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

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

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

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

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

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


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