繁体   English   中英

新创建的文件无法在Java中打开

[英]New Created File Can't Open in Java

我的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与fnfileType以获取完整路径。

您将在每行输入中创建一个新的输出文件,因此您只会得到最后一行。 而且您还会丢失行终止符。 尝试这个:

PrintStream ps = new PrintStream(new FileOutputStream(filePath));
while ((data1 = read1.readLine()) != null)
{
    ps.println(data1);
}
ps.close();

您也没有关闭输入流。

如果不是所有这些文件都是文本文件,则应使用InputStreamOutputStream

请使用finally块关闭打开的流。 如果未关闭流,则在关闭或释放保存该流的进程之前,无法打开它。

例如:

try( InputStream is1 = con1.getInputStream()){
    // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM