从数据库获取文件路径,并下载到本地

从数据库获取文件路径,并下载到本地

@Component
public class InitAction {
 
	@Autowired
	private FilePathService filePathService;
 
	/**
	 * 项目启动时,创建所需文件夹,并根据文件下载路径下载文件到指定文件夹
	 */
	@PostConstruct
	public void downFile() {
 
		Properties props = System.getProperties(); // 获得系统属性集
		String osName = props.getProperty("os.name"); // 操作系统名称
		if (osName.matches(".*Mac.*")) {
			String basepath = "/tmp/";
 
			// 判断是否有此文件夹,没有创建
			List<String> pathLists = new LinkedList<String>();
			String filePath1 = basepath + "file";
			String filePath2 = basepath + "file2";
 
			pathLists.add(filePath1);
			pathLists.add(filePath2);
 
			for (String string : pathLists) {
				File file = new File(string);
				if (!file.exists()) {
					file.mkdirs();
				}
			}
 
			// 下载文件到本地
			List<Static_data> lists = this.filePathService.findAllData();
			List<String> downUrlLists = new LinkedList<String>();
			String filePath = basepath + "file"; // 保存目录
			for (FilePath filePath : lists) {
				downUrlLists.add(filePath.getDown_url());
			}
			// 创建不同的文件夹目录
			File file = new File(filePath);
			// 判断文件夹是否存在
			if (!file.exists()) {
				// 如果文件夹不存在,则创建新的的文件夹
				file.mkdirs();
			}
			FileOutputStream fileOut = null;
			HttpURLConnection conn = null;
			InputStream inputStream = null;
			try {
				for (int i = 0; i < downUrlLists.size(); i++) {
					String downUrl = downUrlLists.get(i);
					String fileName = downUrl.substring(downUrl.lastIndexOf("/")); // 为下载的文件命名
					// 建立链接
					//URL httpUrl = new URL(downUrl)  试一下 你就知道为什么 要注释掉了
					URL httpUrl = new URL(null,downUrl,new Handler());
					conn = (HttpURLConnection) httpUrl.openConnection();
					// 以Post方式提交表单,默认get方式
					conn.setRequestMethod("GET");
					conn.setDoInput(true);
					conn.setDoOutput(true);
					// post方式不能使用缓存
					conn.setUseCaches(false);
					// 连接指定的资源
					conn.connect();
					// 获取网络输入流
					inputStream = conn.getInputStream();
					BufferedInputStream bis = new BufferedInputStream(inputStream);
					// 判断文件的保存路径后面是否以/结尾
					if (!filePath.endsWith("/")) {
						filePath += "/";
					}
					// 写入到文件(文件保存路径 加上 文件的名称)
					fileOut = new FileOutputStream(filePath + fileName);
					BufferedOutputStream bos = new BufferedOutputStream(fileOut);
 
					byte[] buf = new byte[4096];
					int length = bis.read(buf);
					// 保存文件
					while (length != -1) {
						bos.write(buf, 0, length);
						length = bis.read(buf);
					}
					bos.close();
					bis.close();
					conn.disconnect();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
 
	}
 
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值