Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在代码中放置inputstream progressmonitor?_Java - Fatal编程技术网

Java 如何在代码中放置inputstream progressmonitor?

Java 如何在代码中放置inputstream progressmonitor?,java,Java,我试图在代码中加入progressmonitor inputstream,但我所做的一切都做不到。我对java编程非常陌生,在代码中实现某些东西时遇到一些困难 除了无法使用inputstream之外,代码还可以按照我需要的方式正常工作。因此,我希望看到下载进度,因为在下载失败或服务器关闭的情况下,它会出现异常 /* *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择工具|模板 *然后在编辑器中打开模板。 */ 包javatar.language.downlo

我试图在代码中加入progressmonitor inputstream,但我所做的一切都做不到。我对java编程非常陌生,在代码中实现某些东西时遇到一些困难

除了无法使用inputstream之外,代码还可以按照我需要的方式正常工作。因此,我希望看到下载进度,因为在下载失败或服务器关闭的情况下,它会出现异常

/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包javatar.language.download;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.net.MalformedURLException;
导入java.net.URL;
导入javax.swing.JOptionPane;
/**
*
*@作者布鲁诺
*/
公共类URL输入{
公共静态void main(字符串[]args){
字符串userSys=System.getenv(“用户名”);
字符串sysDrive=System.getenv(“SYSTEMDRIVE”);
字符串下行路径=sysDrive+“/Users/”+userSys+“/Downloads”;
试一试{
URL=新URL(“http://akamai-gamecdn.blackdesertonline.com/live001/game/config/config.language.version");
try(//读取服务器返回的文本
BufferedReader in=新的BufferedReader(新的InputStreamReader(url.openStream())){
弦线;
而((line=in.readLine())!=null){
字符串versao=行;
showMessageDialog(null,“实际版本BDO-NA:+versao”);
字符串fileURL=”http://akamai-gamecdn.blackdesertonline.com/live001/game/language/BDOLanguage_“+versao+”.zip”;
字符串saveDIR=下行路径;
SysDownload.downloadFile(fileURL,saveDIR);
}
}
}捕获(格式错误){
showMessageDialog(null,“格式错误的URL:+e.getMessage()”);
}捕获(IOE异常){
showMessageDialog(null,“错误I/O:+e.getMessage()”);
}
}
}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包javatar.language.download;
导入java.io.*;
导入java.net。*;
导入javax.swing.*;
/**
*
*@作者布鲁诺
*/
公共类系统下载{
私有静态最终整数缓冲区大小=4096;
publicstaticvoiddownloadfile(stringfileurl,stringsavedir)抛出IOException{
URL链接=新URL(fileURL);
HttpURLConnection conn=(HttpURLConnection)link.openConnection();
int responseCode=conn.getResponseCode();
if(responseCode==HttpURLConnection.HTTP\u确定){
字符串fileName=“”;
字符串server=conn.getHeaderField(“服务器”);
字符串connectionType=conn.getContentType();
int contentLength=conn.getContentLength();
showMessageDialog(null,“服务器名称:”+Server);
如果(服务器!=null){
int index=server.indexOf(“文件名”);
如果(索引>0){
fileName=server.substring(索引+10,server.length()-1);
}否则{
fileName=fileURL.substring(fileURL.lastIndexOf(“/”)+1,fileURL.length();
}
try(InputStream InputStream=conn.getInputStream()){
字符串savePath=saveDIR+File.separator+fileName;
try(FileOutputStream outputStream=newfileoutputstream(savePath)){
int字节读取=-1;
字节[]缓冲区=新字节[缓冲区大小];
而((bytesRead=inputStream.read(缓冲区))!=-1){
写入(缓冲区,0,字节读取);
}
}
}
showMessageDialog(null,“文件”+fileName+”已下载。\n请参阅用户下载文件夹。“);
}否则{
JOptionPane.showMessageDialog(null,“未下载任何文件”。\n服务器HTTP代码:“+responseCode+JOptionPane.ERROR\u消息”);
}
连接断开();
}
}
}
首先,请咨询

  • 构造函数需要三个参数。与JOptionPane一样,第一个参数是对话框父级,在应用程序中它看起来是
    null
  • 第二个参数是消息。在您的情况下,
    “下载”+链接
    可能就足够了
  • 第三个参数是要监视的InputStream。这应该是您正在下载的InputStream
的最大值应该是下载的大小,您可以通过URLConnection方法获得

无需编写循环即可将InputStream保存到文件中。你可以用它

所以,把它们放在一起,看起来是这样的:

try (ProgressMonitorInputStream inputStream =
        new ProgressMonitorInputStream(null,
            "Downloading " + link,
            conn.getInputStream())) {

    inputStream.getProgressMonitor().setMaximum(conn.getContentLength());
    Files.copy(inputStream, Paths.get(savePath));
}

您使用的是哪个java版本?您看到了吗?