首页后端开发其他后端知识Java怎么抓取url地址的文件流

Java怎么抓取url地址的文件流

时间2024-03-24 21:04:03发布访客分类其他后端知识浏览832
导读:这篇文章给大家介绍了“Java怎么抓取url地址的文件流”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“Java怎么抓取url地址的文件流”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一...
这篇文章给大家介绍了“Java怎么抓取url地址的文件流”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“Java怎么抓取url地址的文件流”有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。

获取url地址文件流
/**
 * 根据url下载文件流
 * @param urlStr
 * @return
 */
public static InputStream getInputStreamFromUrl(String urlStr) {
    
    InputStream inputStream=null;

    try {
    
        //url解码
        URL url = new URL(java.net.URLDecoder.decode(urlStr, "UTF-8"));
    
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
        //设置超时间为3秒
        conn.setConnectTimeout(3 * 1000);
    
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible;
     MSIE 5.0;
     Windows NT;
     DigExt)");
    
        //得到输入流
        inputStream = conn.getInputStream();

    }
 catch (IOException e) {

        
    }
    
    return inputStream;

}
    

根据url获取文件的二进制

当需要获取url的文件,又不想下载文件的时候,可以用这个工具类。

方便快捷,使用HttpURLConnection,先根据URL获取文件流,然后把获取的二进制流存储进去数据库即可,到时候拿出来直接下载、打开也是OK的。

上代码

package jd_test;
    
import java.io.BufferedReader;
     
import java.io.ByteArrayOutputStream;
     
import java.io.File;
     
import java.io.FileOutputStream;
     
import java.io.InputStream;
     
import java.io.InputStreamReader;
     
import java.net.HttpURLConnection;
     
import java.net.URL;
    
import java.util.Base64;
    
import java.util.Random;
    
import java.util.stream.Stream;

 
public class UrlResource {
     
	 private static Base64.Decoder decoder = Base64.getDecoder();
    
	 private static Base64.Encoder encoder = Base64.getEncoder();

	public static void main(String[] args){
 
		try {
     
			//System.out.println(UrlResource.getUrlDetail("http://www.baidu.com",true));
     
			//saveUrlFile("你的文档的路径.gif", "D:\\1.gif");
    
			
			System.out.println(encoder.encode(getUrlFileData("http://www.你的文档的路径")));
    
		  // System.out.println(getUrlFileData("http://www.你的文档的路径"));
    
		   // saveUrlFile("http://www.你的文档的路径", "D:\\1.pdf");
    
		  //  System.out.println(UrlResource.getUrlDetail("http://www.你的文档的路径",true));
     
		
			//确定写出文件的位置
			File file = new File("D:\\1.pdf");
    
			//建立输出字节流
			FileOutputStream fos = new FileOutputStream(file);
    
			
			//fos.write(decoder.decode(encoder.encode(getUrlFileData("http://www.你的文档的路径"))));
    
			//fos.write(encoder.encode(getUrlFileData("http://www.你的文档的路径")));
    
			fos.write(getUrlFileData("http://www.你的文档的路径"));
    
			
			//用FileOutputStream 的write方法写入字节数组
			//fos.write(getUrlFileData("http://www.你的文档的路径"));
    
			System.out.println("写入成功");
    
			//为了节省IO流的开销,需要关闭
			fos.close();

		}
 catch (Exception e) {
    
			e.printStackTrace();
 
		}
 
	}
 
	
	//获取网络文件,转存到fileDes中,fileDes需要带文件后缀名 
	public static void saveUrlFile(String fileUrl,String fileDes) throws Exception 
	{
     
		File toFile = new File(fileDes);
 
		if (toFile.exists()) 
		{
     
		// throw new Exception("file exist");
     
		return;
 
		}
     
		toFile.createNewFile();
     
		FileOutputStream outImgStream = new FileOutputStream(toFile);
    
		System.out.println(getUrlFileData(fileUrl));
    
		outImgStream.write(getUrlFileData(fileUrl));
     
		
		outImgStream.close();
 
	}
 
	
	public static byte[] getBase64UrlFileData(String fileUrl)
	{

		try {
    
			
			//发票PDF文件二进制流base64,如果是get请求还需要进行UrlEncode,使用sdk除外。 
			return encoder.encode(getUrlFileData(new String(decoder.decode(fileUrl))));

		}
 catch (Exception e) {
    
			e.printStackTrace();

		}
    
			return null;

		}

	//获取链接地址文件的byte数据 
	public static byte[] getUrlFileData(String fileUrl) throws Exception 
	{
     
		URL url = new URL(fileUrl);
     
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
     
		httpConn.connect();
     
		InputStream cin = httpConn.getInputStream();
     
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
     
		byte[] buffer = new byte[1024];
     
		int len = 0;
 
		while ((len = cin.read(buffer)) != -1) {
     
		outStream.write(buffer, 0, len);
 
		}
     
		cin.close();
     
		byte[] fileData = outStream.toByteArray();
     
		outStream.close();
     
		return fileData;
 
	}
 
	
	//获取链接地址的字符数据,wichSep是否换行标记 
	public static String getUrlDetail(String urlStr,boolean withSep) throws Exception 
	{
     
	URL url = new URL(urlStr);
     
	HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
     
	httpConn.connect();
     
	InputStream cin = httpConn.getInputStream();
     
	BufferedReader reader = new BufferedReader(new InputStreamReader(cin,"UTF-8"));
     
	StringBuffer sb = new StringBuffer();
     
	String rl = null;
 
	while((rl = reader.readLine()) != null) 
	{
 
		if (withSep) 
		{
     
			sb.append(rl).append(System.getProperty("line.separator"));
 
		}

		//如果是要直接显示到页面中,可以讲获得的byte数据进行base64加密,加上文件头,直接设置到img的src里面就可以了
		else 
		{
     
			sb.append(rl);
 
		}
 
	}
     
		return sb.toString();
 
	}
 
}
    



现在大家对于Java怎么抓取url地址的文件流的内容应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多Java怎么抓取url地址的文件流的知识,欢迎关注网络,网络将为大家推送更多相关知识的文章。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Java怎么抓取url地址的文件流
本文地址: https://pptw.com/jishu/652317.html
如何清除Laravel中的缓存,有什么方法 用Java怎么实现查询IP归属地功能

游客 回复需填写必要信息