URI 方案不是“文件”

2022-09-02 20:16:30

我得到异常:“URI方案不是文件”

我正在做的是尝试获取文件的名称,然后将该文件(从另一台服务器)从servlet中保存到我的计算机/服务器上。

我有一个名为“url”的字符串,从这里开始,这是我的代码:

url = Streams.asString(stream); //gets the URL from a form on a webpage
System.out.println("This is the URL: "+url);
URI fileUri = new URI(url);

File fileFromUri = new File(fileUri);                   

onlyFile = fileFromUri.getName(); 
URL fileUrl = new URL(url);
InputStream imageStream = fileUrl.openStream();
String fileLoc2 = getServletContext().getRealPath("pics/"+onlyFile);

File newFolder = new File(getServletContext().getRealPath("pics"));
    if(!newFolder.exists()){
        newFolder.mkdir();
    }
    IOUtils.copy(imageStream, new FileOutputStream("pics/"+onlyFile));
} 

导致错误的行是这样的:

File fileFromUri = new File(fileUri);                   

我已经添加了其余的代码,因此您可以看到我正在尝试执行的操作。


答案 1

URI“方案”是“:”之前的东西,例如“http://stackoverflow.com”中的“http”。

错误消息告诉您仅适用于“file:”URI(引用当前系统上的路径名的URI),而不适用于“http”等其他方案。new File(fileUri)

基本上,“file:”URI 是指定类的路径名的另一种方法。这不是一种神奇的方式来告诉使用http从网络获取文件。FileFile


答案 2

你从这里开始创作的假设是错误的。FileURL

您只需要在Internet中创建一个指向文件的从URL,以便获得文件名。File

您可以简单地通过解析URL来执行此操作,如下所示:

URL fileUri = new URL("http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/ladybug/fish4.jpg");    
int startIndex = fileUri.toString().lastIndexOf('/');
String fileName = fileUri.toString().substring(startIndex + 1);
System.out.println(fileName);