我的else if
阻止将验证远程服务的结果。
如果结果匹配,它将触发另一个API调用以再次联系远程服务。远程服务将文件发送回我的客户端程序。
我测试了所有代码并且它正在运行,但我无法打开新文件并且显示文件已损坏。我的客户端程序将从远程服务读取该文件,并将其写入另一个目录中的另一个文件名。
这是我的源代码:
else if (result == 1 && value.equals("problem"))
{
String Url = "http://server_name:port/anything/anything/";
String DURL = Url.concat(iD);
System.out.println("URL is : " + DURL); // the remote API URL
URL theUrl = new URL (DURL);
HttpURLConnection con1 = (HttpURLConnection) theUrl.openConnection(); //API call
con1.setRequestMethod("GET");
con1.connect();
int responseCode = con1.getResponseCode();
if(responseCode == 200)
{
try
{
InputStream is1 = con1.getInputStream();
BufferedReader read1 = new BufferedReader (new InputStreamReader(is1));
String data1 = "" ;
while ((data1 = read1.readLine()) != null)
{
PrintStream ps = new PrintStream(new FileOutputStream(filePath));
ps.print(data1);
ps.close();
}
System.out.println("The new sanitized file is ready");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
这是我在代码 D:/file/red_new.docx 中提到的filePath
。这就是我获取文件路径的方式:String filePath = "D:/file/"+fn+"_new."+fileType;
。 fn
变量是来自第一个API调用的JSON字符串的文件名,而fileType
是来自第二个API调用的JSON字符串的文件类型。我添加_new
来表示它是一个新文件,并使用java连接fn
和fileType
来获取完整路径。
答案 0 :(得分:1)
您正在为每行输入创建一个新的输出文件,因此您只能获得最后一行。你也失去了线路终结器。试试这个:
PrintStream ps = new PrintStream(new FileOutputStream(filePath));
while ((data1 = read1.readLine()) != null)
{
ps.println(data1);
}
ps.close();
您也没有关闭输入流。
如果这些文件并非都是文本文件,那么您应该使用InputStream
和OutputStream
。
答案 1 :(得分:0)
请使用finally块关闭打开的流。如果未关闭流,则在关闭或释放保持流的进程之前无法打开它。
例如:
try( InputStream is1 = con1.getInputStream()){
// ...
}