用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java I/O 批量插入保存文件

2015-02-25 作者: java源代码大全举报

[java]代码库

package cq.price;



import java.io.File;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.TimeoutException;



public class ConcurrentTotalFileSize {



	public static void main(String[] args) throws InterruptedException,

			ExecutionException, TimeoutException {

		long start = System.nanoTime();

		System.out.println("Total Size: "

				+ new ConcurrentTotalFileSize()

						.getTotalFileSizeOfFilesInDir(new File("F:\\资料")));

		System.out.println("Time: " + (System.nanoTime() - start)

				/ 1.0e9);

	}



	public long getTotalFileSizeOfFilesInDir(final File file)

			throws InterruptedException, ExecutionException, TimeoutException {

		if (file.isFile()) {

			return file.length();

		}

		ExecutorService service = Executors.newFixedThreadPool(4);

		long total;

		try {

			total = 0;

			List<File> directories = new ArrayList<File>();

			directories.add(file);

			while (!directories.isEmpty()) {

				final List<Future<SubDirectoriesAndSize>> partialResults = new ArrayList<Future<SubDirectoriesAndSize>>();

				for (final File direcotry : directories) {

					partialResults.add(service

							.submit(new Callable<SubDirectoriesAndSize>() {

								@Override

								public SubDirectoriesAndSize call()

										throws Exception {

									return getTotalAndSubDirectories(direcotry);

								}

							}));

				}

				directories.clear();



				for (Future<SubDirectoriesAndSize> future : partialResults) {

					SubDirectoriesAndSize directoriesAndSize = future.get(100,

							TimeUnit.SECONDS);

					if (directoriesAndSize == null) {

						continue;

					}

					total += directoriesAndSize.size;

					directories.addAll(directoriesAndSize.subDirectories);

				}



			}

		} catch (Exception e) {

			e.printStackTrace();

			throw new RuntimeException(e.getMessage(), e);

		} finally {

			service.shutdown();

		}

		return total;

	}



	public SubDirectoriesAndSize getTotalAndSubDirectories(final File file) {

		long total = 0;

		List<File> subDirectories = new ArrayList<File>();

		if (file.isDirectory()) {

			File[] children = file.listFiles();

			if (children != null) {

				for (File child : children) {

					if (child.isFile()) {

						total += child.length();

					} else {

						subDirectories.add(child);

					}

				}

			}

		}

		return new SubDirectoriesAndSize(total, subDirectories);

	}

}



/**

 * 记录当初文件夹的下文件的大小以及子文件夹

 * 

 * @author Administrator

 *

 */

class SubDirectoriesAndSize {

	final public long size;

	final public List<File> subDirectories;



	public SubDirectoriesAndSize(long size, List<File> subDirectories) {

		super();

		this.size = size;

		this.subDirectories = subDirectories;

	};

}

//源代码片段来自云代码http://yuncode.net
			


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...