1

バッファリーダーを使用しないようにFileReaderを使用する方法私はftpからファイルを読み取るこのプログラムにFile、FileReaderを使用したい

    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

入力ストリームをファイルに変換してから、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();

File Reader は 1 文字ずつ読み取ることに注意してください。これが、人々が BufferedReader を好む理由です。

一般に、Reader から作成された各読み取り要求により、対応する読み取り要求が基になる文字またはバイト ストリームから作成されます。したがって、FileReaders や InputStreamReaders など、read() 操作にコストがかかる可能性のある Reader を BufferedReader でラップすることをお勧めします。例えば、

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

指定されたファイルからの入力をバッファリングします。バッファリングがないと、read() または readLine() を呼び出すたびに、ファイルからバイトが読み取られ、文字に変換されてから返される可能性があり、非常に非効率になる可能性があります。

于 2012-06-22T07:27:32.617 に答える
1

なんで?入力はファイルではありません。すべての入力をファイルに書き込んでから FileReader を開き、完了したらファイルを削除することを忘れないようにすることもできますが、データを 2 回読み取るという膨大な時間の無駄です。Reader または InputStream を提供できるように、API を簡単に調整できます。

于 2012-06-22T08:43:55.200 に答える