[英]How to use FileReader not to use BufferReader
如何使用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.");
}
}
我创建的这段代码
你不能 FileReader从文件系统读取文件。 它不会从FTP连接读取。
您必须将输入流转换为文件,然后使用文件阅读器。
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) {
}
obove代码从输入流创建文件对象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逐个字符地读取字符,这就是为什么人们更喜欢BufferedReader的原因。
通常,由读取器发出的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。 因此,建议将BufferedReader包装在其read()操作可能会很昂贵的任何Reader周围,例如FileReaders和InputStreamReaders。 例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲来自指定文件的输入。 如果不进行缓冲,则每次调用read()或readLine()都可能导致从文件中读取字节,将其转换为字符,然后返回,这可能会非常低效。
为什么? 输入的不是文件。 您可以将所有输入写入文件,然后打开FileReader并尝试记住完成后删除该文件,但这是一个巨大的时间浪费:两次读取数据。 调整API更简单,因此您可以提供Reader或InputStream。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.