如何使用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.");
}
}
我创建的代码
答案 0 :(得分:4)
你做不到。 FileReader从文件系统中读取文件。它不能从FTP连接读取。
答案 1 :(得分: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) {
}
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();
请注意,文件阅读器逐个字符地读取。这就是人们更喜欢BufferedReader的原因。
通常,由Reader构成的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议将BufferedReader包装在任何read()操作可能代价高昂的Reader上,例如FileReaders和InputStreamReaders。例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,read()或readLine()的每次调用都可能导致从文件中读取字节,转换为字符,然后返回,这可能是非常低效的。
答案 2 :(得分:1)
为什么呢?输入不是文件。您可以将所有输入写入文件,然后打开FileReader并尝试记住在完成时删除文件,但这是一个巨大的浪费时间:读取数据两次。更容易调整您的API,以便您可以提供Reader或InputStream。