Как лучше всего сделать «доступными» файловые конструкторы потока ввода-вывода (канал и ByteBuffer также) - PullRequest
0 голосов
/ 02 мая 2011

Я хотел бы знать, как лучше всего сделать «доступным» или «видимым» набор конструкторов потока файлового ввода-вывода, определенных в моей основной подпрограмме, для подпрограмм.

Я обнаружил, что не могу использовать «public», компилятор выдает ошибку «Illegal Expression».

Когда я помещаю файловый поток ввода-вывода и конструкторы каналов в открытый класс, определенный для вся программа "пакет". Компилятор выдает ошибку, утверждающую, что обработка FileNotFound или IOException не объявлена, поэтому я добавил в свою основную процедуру следующее:

public static void main(String args[]) throws FileNotFoundException, IOException
 { 
     // and if I then place the File I/O contructors after this: 

                   //Connect to the LU62XC Message File 
    FileOutputStream MesgOut = new FileOutputStream(Mesg_File) ;
    FileChannel MesgChnl  =  MesgOut.getChannel() ;
    ByteBuffer  Mesg_Bufr =  ByteBuffer.allocate(128) ; 

           //Connect to the Request Input File 
    FileInputStream RqstInp = new FileInputStream(Rqst_File) ;  
           //Connect to the Response Output File 
    FileOutputStream RespOut = new FileOutputStream(Resp_File) ;
           //Connect to the Request/Response Log File 
    FileOutputStream LogrOut = new FileOutputStream(Logr_File) ;

Я разрешаю «ошибка обработки исключений», но теперь моя проблема - подпрограммы которые ссылаются на "построенные" объекты файла, по сути не может .. Я получаю кучу «символ не найден» сообщения об ошибках. Опять же, если я поставлю «public» перед конструкторами файлового ввода-вывода, я получу сообщение «Illegal expression».

Есть ли выход из этого ???

Почему java-компилятор настаивает на том, чтобы программа обрабатывала ошибки, связанные с отсутствием файлов, мне не понятно. Я имею в виду, что уже есть метод if file_object.exists() ...

ЕСЛИ файла нет ... ОС сообщит вам. Все, что ЛЮБОЙ прикладной программе (ООП или иным образом) делает, когда дело доходит до ввода-вывода любого рода, это сделать запрос к базовой ОС.

Ответы [ 2 ]

0 голосов
/ 02 мая 2011

Это базовая Java: вам нужно передать ссылки на методы, которые нуждаются в них, или создать их как переменные экземпляра и создать экземпляр класса.

Я предлагаю вам прочитать учебное пособие «Начало работы»: http://download.oracle.com/javase/tutorial/java/index.html

0 голосов
/ 02 мая 2011

Если вы хотите, чтобы метод использовал ваш объект в качестве локальной переменной, вы можете передать его в качестве аргумента. Это стандартная практика практически на каждом языке, о котором я могу думать. Однако вместо передачи FileInputStream лучше передать имя файла в camelCase

// in main
process(requestFile, responseFile, logFile);

// later
public static void process(String requestFile, String responseFile, String logFile) throw IOException {
    //Connect to the Request Input File 
    FileInputStream requestIn = new FileInputStream(requestFile);  
    //Connect to the Response Output File 
    FileOutputStream responseOut = new FileOutputStream(responseFile);
    //Connect to the Request/Response Log File 
    FileOutputStream logOut = new FileOutputStream(logFile);

    requestIn.close();
    responseOut.close();
    logOut.close();
}

Я получаю кучу сообщений об ошибках "символ не найден".

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

Опять же, если я поставлю "public" перед конструкторами файлового ввода-вывода, я получу сообщение о недопустимом выражении.

Поскольку публичные поля не могут быть определены в методе, они должны быть определены вне метода, обычно в начале класса.

Есть ли выход из этого ???

Чтение нескольких учебных пособий http://www.google.com/search?q=java+turorials 11 миллионов результатов или рабочий пример http://www.google.com/search?q=java+examples 25 миллионов результатов

Почему java-компилятор настаивает на том, что программа обрабатывает ошибки, связанные с отсутствием файлов, мне не понятно. Я имею в виду, что метод if file_object.exists () уже существует ... ЕСЛИ файла нет ... ОС сообщит вам об этом.

Он дает вам знать, генерируя исключение FileNotFoundException. Что вы ожидаете от этого?

Все ЛЮБЫЕ прикладные программы (ООП или иным образом), когда дело доходит до ввода-вывода любого рода, делают запрос к базовой ОС.

И ОС может вернуть ошибку, которую вы должны уметь обрабатывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...