使用 Java 读取远程文件

2022-09-02 03:23:56

我正在寻找一种简单的方法来获取位于远程服务器上的文件。为此,我在我的Windows XP上创建了一个本地ftp服务器,现在我正在尝试为我的测试小程序提供以下地址:

try
{
    uri = new URI("ftp://localhost/myTest/test.mid");
    File midiFile = new File(uri);
}
catch (Exception ex)
{
}

当然,我收到以下错误:

URI 方案不是“文件”

我一直在尝试其他一些方法来获取文件,它们似乎不起作用。我该怎么做?(我也热衷于执行HTTP请求)


答案 1

你不能用ftp开箱即用地做到这一点。

如果你的文件在 http 上,你可以执行类似于以下内容的操作:

URL url = new URL("http://q.com/test.mid");
InputStream is = url.openStream();
// Read from is

如果你想使用一个库来做FTP,你应该看看Apache Commons Net。


答案 2

通过http读取二进制文件并将其保存到本地文件(取自此处):

URL u = new URL("http://www.java2s.com/binary.dat");
URLConnection uc = u.openConnection();
String contentType = uc.getContentType();
int contentLength = uc.getContentLength();
if (contentType.startsWith("text/") || contentLength == -1) {
  throw new IOException("This is not a binary file.");
}
InputStream raw = uc.getInputStream();
InputStream in = new BufferedInputStream(raw);
byte[] data = new byte[contentLength];
int bytesRead = 0;
int offset = 0;
while (offset < contentLength) {
  bytesRead = in.read(data, offset, data.length - offset);
  if (bytesRead == -1)
    break;
  offset += bytesRead;
}
in.close();

if (offset != contentLength) {
  throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes");
}

String filename = u.getFile().substring(filename.lastIndexOf('/') + 1);
FileOutputStream out = new FileOutputStream(filename);
out.write(data);
out.flush();
out.close();