JAVA之文件复制 图片下载

用java打造属于自己的爬虫

网络上的图片太多 一个一个的保存实在太浪费时间

基于此 就使用了java做了一个小工具

功能是文件的复制 以及 网络上图片的下载

首先是IOUtlis类的创建

package hh;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.net.*;
public class IOUtils
{
//	buff缓冲区

public static void closeQuietly(FileOutputStream outpustream)
{
	 if(outpustream!=null)
	 {

    try
	{
    	outpustream.close();
	} 

      catch (IOException e)
	{
		// TODO 自动生成的 catch 块
		//e.printStackTrace();
	}

	 }

}
public static void closeQuietly(FileInputStream inStream)
{
	 if(inStream!=null)
	 {

    try
	{
		inStream.close();
	} 

      catch (IOException e)
	{
		// TODO 自动生成的 catch 块
		//e.printStackTrace();
	}

	 }

}
public static void closeQuietly(Reader reader)
{
	 if(reader!=null)
	 {
		 try
		 {
			 reader.close();

		 }
		 catch(IOException e )
		 {
			 //

		 }

	 }

}

public static void copy(InputStream instream,OutputStream outputstream,int  buff) throws IOException
{
	byte[] buffer=new byte[buff];
	int len;//计算读入的数据
	if(instream==null)
	{
		throw new IllegalArgumentException("INPUTSTREAM不能为空");

	}
	if(outputstream==null)
	{
		throw new IllegalArgumentException("outputstream不能为空");

	}
	if(buff<=0)
	{

		throw new IllegalArgumentException("outputstream不能为空");

	}
	while((len=instream.read(buffer))>0)
	{
			//不知道怎么处理异常就让调用者处理
		outputstream.write(buffer,0,len);

	}

}

public static void copy(InputStream instream,OutputStream outputstream) throws IOException
{

copy(instream,outputstream,1024);
}

 copy这个方法实现了文件的复制功能,closequietly将文件流安静的关闭

方案一

文件的复制,目的是将E盘的1.txt文件复制到W盘的2.txt文件里 最后不要忘了关闭文件的输入输出流

不然可能导致复制失败

package hh;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class test {

	public static void main(String[] args)
	{
		long startMS=System.currentTimeMillis();

		FileInputStream fis=null;
		FileOutputStream fos=null;

		try
		{
			fis=new FileInputStream("E:\\1.txt");
			fos=new FileOutputStream("W:\\2.txt");
			IOUtils.copy(fis,fos,1024);
			long endMS=System.currentTimeMillis();
			System.out.println("拷贝完成 耗时"+(endMS-startMS));

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

  方案二

调用了java.net.*;这个包 使用url类将图片地址比如下图画圈部分当做一个文件的输入流来使用,再使用copy方法将图片复制到本地。最后我发现该网站所有的图片都有一个特定的图片递增规则(可以考虑使用正则表达式)这样就可以通过变量来完成网站里所有的图片的复制

package hh;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
public class abc {

	public static void main(String []args)
	{
		  InputStream inpustream=null;
	      FileOutputStream outputstream=null;

		try {
			long start=System.currentTimeMillis();
		int i=0;
		for(i=1;i<550;i++)
		{
			URL url=new URL("http://www.bokee.com//topic/images/%E6%9C%AA%E6%A0%87%E9%A2%98-2("+i+").jpg");
	    	  inpustream=url.openStream();

//	    	  http://www.bokee.com//topic/images/%E6%9C%AA%E6%A0%87%E9%A2%98-1(530).jpg
//	    	  <img src="/_upload/article/images/66/b6/810dfe294d62aa81fba5ca1baef9/57c958b6-72e8-4331-a431-24b06039b649.jpg">
//	    	  <img src="/_upload/article/images/99/a1/416529614b32ba6a2f824bbbafae/04b85865-f1b9-4128-b33f-04eff1e81c5a.jpg">
	          outputstream=new FileOutputStream("W://main//"+i+".png");
		      IOUtils.copy(inpustream, outputstream);
		}
		long end=System.currentTimeMillis();

		System.out.println("下载成功,耗时"+(start-end)+"毫秒");
		} 

		catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

  

成果如下,最终满足了自己的需求,节省了时间。

时间: 2024-10-03 23:14:37

JAVA之文件复制 图片下载的相关文章

fastDFS与java整合文件上传下载

准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactI

java多种文件复制方式以及效率比较

1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream 传统的字符流读写复制FileReader,FileWriter,BufferWriter,BufferedWriter,BufferedReader NIO系列的FileChannel FileChannel+缓冲 java.nio.Files.copy() 第三方包中的Fi

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

java IO流复制图片

一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // String srcPath = "E://11.jpg"; // String destPath = "E://22.jpg"; //(2)通过文件类 File srcPath = new File("E://11.jpg"); File destPat

Java实现文件复制的四种方式

背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操作 1 private static void streamCopyFile(File srcFile, File desFile) throws IOException { 2 // 使用字节流进行文件复制 3 FileInputStream fi = new FileInputStream(sr

Java 实现文件复制的不同方法

用不同的方法实现文件的复制 1. 通道 Channel,它是一个对象,可以通过它读取和写入数据.拿NIO与原来的I/O比较,通道就像是流.是对接操作系统底层和缓冲区的桥梁. 2. 性能比较 内存映射最快,其次是NIO读写文件,再其次是加了缓冲的IO流,最后是无缓冲的IO流 代码示例 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; impor

java中文件复制的4种方式

今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数组很大,导致复制后目标文件非常大,其实就是空行等一些无效空间.我也是很少用这种方式拷贝问价,大多数用Apache提供的commons-io中的FileUtils,后来在网上查了下,发现还有其他的方式,效率更高,所以在此整理一下,也是自己的一个学习. 1. 使用FileStreams复制 比较经典的一个代码,使用FileInputStream读取文件

Java字节流文件复制

1.字节流 在 Java 中,文件的复制使用字节输入流和字节输出流实现,java.io 包有 InputStream 和 OutputStream 这两个顶层抽象类规范了读写文件所需的核心 API. 我们可以使用它们的子类 FileInputStream 和 FileOutputStream 来编写程序复制文件. 第一种方式: 使用 read() 和 write() 方法配合循环操作单字节的读取.写入 InputStream 的 read() 会尝试从文件读取一个字节,如果到了文件结尾则会返回-

【java】文件复制的简单实现

1 package 文件操作; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.OutputStream; 9 10 public class TestCopy { 11 public static voi