2012-06-22 5 views
1

Как использовать FileReader не использовать BufferReader я хочу использовать файл, FileReader для этой программы чтения файлов с FTPКак использовать FileReader не использовать BufferReader

public class FileReader { 


public final static String SERVER = "ftp://server.com"; 
public final static String USER_NAME = "user"; 
public final static String PASSWORD = "password"; 
public final static String FILE_NAME = "Sorting Cloumns Dynamically - Java Scripts.txt"; 

public static void main(String[] args) { 

    System.out.println("Connecting to FTP server..."); 

    // Connection String 
    URL url; 
    try { 
     url = new URL("ftp://" + USER_NAME + ":" + PASSWORD + "@" + SERVER+ "/study/" + FILE_NAME +";type=i"); 


     URLConnection con = url.openConnection(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 

     System.out.println("Reading file start."); 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
     } 
     catch (FileNotFoundException e) { 
      System.out.println("File not find on server."); 
      System.exit(0); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     System.out.println("Read File Complete."); 

} 

    } 

этот код я создал

ответ

1

Вам необходимо преобразовать входной поток в файл, а затем использовать File Reader.

 URL url; 
     try { 
      url = new URL("ftp://" + USER_NAME + ":" + PASSWORD + "@" + SERVER 
        + "/study/" + FILE_NAME + ";type=i"); 
      URLConnection con = url.openConnection(); 
      File tmpFile = new File("tmpFile.java"); 
      OutputStream out = new FileOutputStream(f); 

      InputStream inputStream = con.getInputStream(); 

      byte buf[] = new byte[1024]; 
      int len; 
      while ((len = inputStream.read(buf)) > 0) 
       out.write(buf, 0, len); 
      out.close(); 
      inputStream.close(); 

     } catch (IOException e) { 
     } 

Код записи создает файл-файл tmpFile из входного потока. Вы можете использовать Filereader в этом файловом объекте.

FileReader fileReader=new FileReader(tmpFile); 
    int ch= fileReader.read(); 
    while(ch != -1){ 
    System.out.print((char)ch); 
    ch = fileReader.read(); 
    } 
    fileReader.close(); 

Обратите внимание, что читатель читает файл символ по character.Thats, почему люди предпочитают BufferedReader над ним.

В общем, каждый запрос на считывание, сделанный из Reader, вызывает запрос на чтение, который должен быть сделан из базового символа или потока байтов. Поэтому целесообразно обернуть BufferedReader вокруг любого Reader, чьи операции read() могут быть дорогостоящими, например FileReaders и InputStreamReaders. Например,

BufferedReader in 
    = new BufferedReader(new FileReader("foo.in")); 

будет буферизовать ввод из указанного файла. Без буферизации каждый вызов read() или readLine() может привести к чтению байтов из файла, преобразованию в символы и возврату, что может быть очень неэффективным.

+0

как распечатать файл на консоли .. –

+0

@Bharat Я обновил свой ответ. –

+3

Однако следует отметить, что это потенциально колоссальная трата времени. – EJP

4

Вы не можете. FileReader читает файл из файловой системы. Он не читается из FTP-соединения.

1

Почему? Ввод не является файлом. Вы можете записать все входные данные в файл, а затем открыть FileReader и попытаться забыть удалить файл по завершении, но какая колоссальная трата времени: чтение данных дважды. Упростите настройку API, чтобы вы могли снабжать Reader или InputStream.

Смежные вопросы