Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 03:00   #1
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию Чтение текстового файла

Пробую читать текстовой файл.
Код:

package javaapplication3;
import java.io.*;
import java.nio.channels.*; 
import java.nio.*;
class Main{
    public static void main(String[] args) throws IOException  {
          //Сначала открываем файл для воода данных
       FileInputStream obj = new FileInputStream("c:\\1.txt");

       //После этого получаем канал для этого файла
       FileChannel ob = obj.getChannel();
       long razmer_buf = ob.size();
       System.out.println("Файл 1.txt имеет размер "+razmer_buf+" байт");
       //Выделяем буффер требуемого размера
       ByteBuffer b = ByteBuffer.allocate((int)razmer_buf);
       //Считываем файл в буффер
       ob.read(b);
       b.rewind();
       for(int i=0; i<razmer_buf;i++){
           System.out.print((char)b.get());
            obj.close();
           ob.close();
       }
       System.out.println();
    }
}
При выводе получаю квадратики, вместо текста:
"ПРИВЕТ МУХОМОР", который находится в файле 1.txt,скажите как исправить,чтоб на руском выводило?
Выводит такое:
Код:
run:
Файл 1.txt имеет размер 15 байт
ᅬ￰│¬¥￲ ᅩᅮᅰᅫᅩᅫ￐!
BUILD SUCCESSFUL (total time: 0 seconds)
Kasper1 вне форума Ответить с цитированием
Старый 15.12.2010, 17:25   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

используй bufferedReader, должно помочь
Код:
BufferedReader br = new BufferedReader(new InputStreamReader( 
new FileInputStream("C:/1.txt"), "Cp1251"));

br.readLine();
BleStaR вне форума Ответить с цитированием
Старый 15.12.2010, 21:53   #3
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Написал так:
Код:
package javaapplication3;
import java.io.*;
import java.nio.channels.*;
import java.nio.*;
class Main{
    public static void main(String[] args) throws IOException  {
          //Сначала открываем файл для воода данных

BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "Cp1251"));

br.readLine();

       //После этого получаем канал для этого файла
       FileChannel ob = obj.getChannel();
       long razmer_buf = ob.size();
       System.out.println("Файл 1.txt имеет размер "+razmer_buf+" байт");
       //Выделяем буффер требуемого размера
       ByteBuffer b = ByteBuffer.allocate((int)razmer_buf);
       //Считываем файл в буффер
       ob.read(b);
       b.rewind();
       for(int i=0; i<razmer_buf;i++){
           System.out.print((char)b.get());
            obj.close();
           ob.close();
       }
       System.out.println();
    }
}
Программа не компилируется вообще. Выдаёт такое:
Код:
run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
        at javaapplication3.Main.main(Main.java:15)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
Kasper1 вне форума Ответить с цитированием
Старый 15.12.2010, 23:56   #4
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Да, точно, вот так сработало:
Код:
package javaapplication3;
import  java.io.*;
import java.util.*;


class Main{
    public static void main(String[] args) throws IOException  {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "Cp1251"));
List<String> fileContent = new ArrayList<String>() ;
   String str;
   while( (str = br.readLine() ) != null )
        fileContent.add(str);
System.out.println( fileContent);
br.close();
    }
}
Вроде всё сделалось, немного не понятно каким образом.
1)Скажите вот это List<String> fileContent = new ArrayList<String>() ;
Это обобщённый класс, который передаёт в качестве параметра тип Стринг классу List и классу ArrayList? Зачем?
2)Объясните вот это вложенное объект в объекте, как это так и зачем?
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "Cp1251"));

Как убрать квадратные скобки при выводе? Я тогда не глянул ,сейчас увидел. Вывод у меня такой:
Код:
run:
[Привет МУХОМОР!]
BUILD SUCCESSFUL (total time: 0 seconds)

Последний раз редактировалось Kasper1; 16.12.2010 в 00:41.
Kasper1 вне форума Ответить с цитированием
Старый 16.12.2010, 17:03   #5
Kasper1
Форумчанин
 
Аватар для Kasper1
 
Регистрация: 13.12.2010
Сообщений: 220
По умолчанию

Попробовал создать для теста обобщённый класс.
Код:
package javaapplication3;

class A<T,K>{
    A(){}
    A(T a,K b){
    T x1 = a;
    K x2 = b;
    System.out.println("Результат 1 = "+a);
    System.out.println("Результат 2 = "+b);
    }
}


class Main{
public static void main(String[] args)  {
A<String,Integer> ob = new A<String,Integer>("Привет",5);
A<Double,Integer> ob2 = new A<Double,Integer>(10.4,5);

    }
}
Результат такой:
Код:
run:
Результат 1 = Привет
Результат 2 = 5
Результат 1 = 10.4
Результат 2 = 5
BUILD SUCCESSFUL (total time: 0 seconds)
Меня интересует как эта строка используется:
Код:
List<String> fileContent = new ArrayList<String>() ;
Получается просто создаётся объект fileContent класса List
А потом что происходит с этим объектом? Что даёт создание этого объекта?

2) объясните вот эту вложенность, как можно влаживать один объект в конструктор другого?
Код:
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "Cp1251"));
Kasper1 вне форума Ответить с цитированием
Старый 17.12.2010, 15:57   #6
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Цитата:
1)Скажите вот это List<String> fileContent = new ArrayList<String>() ;
Это обобщённый класс, который передаёт в качестве параметра тип Стринг классу List и классу ArrayList? Зачем?
ArrayList наследован от интерфейса List, поэтому данная конструкция имеет место быть. Почитай про наследование.
касательно <String> - это использование так называемых дженериков (Generics). погугли по этому вопросу.

Цитата:
объясните вот эту вложенность, как можно влаживать один объект в конструктор другого?
Код:

BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:\\1.txt"), "Cp1251"));
В роли параметра, в конструкторы и методы, можно передавать и ссылки на объекты.
BleStaR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из текстового файла MooNChilDUA Общие вопросы C/C++ 2 13.01.2011 19:25
Чтение данных из текстового файла flame33 Общие вопросы .NET 2 19.07.2010 11:43
Чтение массива из текстового файла. Metil Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.01.2009 22:53
Чтение пунктов TreeView из текстового файла DEVDITS Компоненты Delphi 2 20.05.2007 21:49