1

如何使用 FileReader 不使用 BufferReader 我想使用 File,FileReader 来从 ftp 读取文件的程序

    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.");

}

    }

我创建的这段代码

4

3 回答 3

4

你不能。FileReader 从文件系统中读取文件。它不会从 FTP 连接中读取。

于 2012-06-22T07:25:16.343 回答
1

您必须将输入流转换为文件,然后使用文件阅读器。

        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();

请注意,文件阅读器逐个字符地读取。这就是人们更喜欢 BufferedReader 的原因。

通常,由 Reader 发出的每个读取请求都会导致对底层字符或字节流发出相应的读取请求。因此,建议将 BufferedReader 包裹在 read() 操作可能成本高昂的任何 Reader 周围,例如 FileReaders 和 InputStreamReaders。例如,

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

将缓冲来自指定文件的输入。如果没有缓冲,每次调用 read() 或 readLine() 都可能导致从文件中读取字节,转换为字符,然后返回,这可能非常低效。

于 2012-06-22T07:27:32.617 回答
1

为什么?输入不是文件。您可以将所有输入写入文件,然后打开 FileReader 并尝试记住在完成后删除文件,但这是多么浪费时间:读取数据两次。更容易调整您的 API,以便您可以提供 Reader 或 InputStream。

于 2012-06-22T08:43:55.200 回答