微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法使用 java 1.8

如何解决有没有办法使用 java 1.8

我的要求是调用一个 Rest api,其中的 o/p 是一个 pdf 文件并使用基于 java 的脚本语言生成一个 PDF 文件。 我们在脚本中使用 readAllBytes() 方法,因为我们不能在脚本中使用 byte[](限制)。我们脚本的等效 java 代码如下。由于不建议使用 readAllBytes() 方法读取大型流,是否有不使用 byte[] 的替代方法? .

请注意:我们使用的是 1.8 java,不能使用除 Apache Commons IO 之外的任何第三方库。

感谢您的帮助。


import java.io.BufferedInputStream;
import java.io.bufferedoutputstream;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class ExecuteReportFromScript {

 public static void main(String[] args) {
     // Todo Auto-generated method stub

     try {
          byte[] buffer = new byte[1024];
         URL url = new URL("restEndPoint");


         HttpURLConnection con = (HttpURLConnection) url.openConnection();
         con.setRequestMethod("GET"); 
         con.setRequestProperty("Cookie","myCookieData"); 
         con.setRequestProperty("Accept","application/json");
         
          
         con.setDoOutput(true); 

        con.connect();
        
        System.out.println("Response Code:" + con.getResponseCode());            
        InputStream ip = con.getInputStream(); 
        BufferedInputStream is = new BufferedInputStream(ip);           
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bos.write( is.readAllBytes());
         /*
          * int length; while ((length = is.read(buffer)) > -1 ) { bos.write(buffer,* length); }
          */
        bos.flush();           
        File file = new File("PathToFile\\FileName.pdf");
        try(bufferedoutputstream salida = new bufferedoutputstream(new FileOutputStream(file))){
            salida.write(bos.toByteArray());
            salida.flush();
        }
ip.close();
        is.close();
        bos.close();
        

         
     } catch (MalformedURLException e1) {
         // Todo Auto-generated catch block
         e1.printstacktrace();
     } catch (IOException e) {
         // Todo Auto-generated catch block
         e.printstacktrace();
     }

 } 

解决方法

使用 Files.copy(InputStream in,Path target,CopyOption... options) (自 Java 7) 将流直接写入文件。

Path file = Paths.get("PathToFile\\FileName.pdf");
try (InputStream in = new BufferedInputStream(con.getInputStream())) {
    Files.copy(in,file);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。