黑马程序员技术交流社区
标题:
求高手!
[打印本页]
作者:
黑马陈旭东
时间:
2012-6-13 21:32
标题:
求高手!
//需求是这样的!
我有一个目录里有很多壁纸分散在很多子目录里!你懂得,360的那个!
我想把这些壁纸都复制到没有子目录的文件夹里! 当然!能剪切就最好!
是纠结了很久的代码!没法完成之后上来求救了
!
package test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTest1 {
/**
* @param args
* @throws IOException
*/
/*
* 想要列出指定的目录下的所有内容。包含着子目录中的内容。
* 思路:
* 1:获取指定目录的内容
* a:因为目录下有子目录,所以考虑用到递归
* 2:将这些文件复制到一个文件中。
* a:用IO流
* b; 明确1:数据源和目的地都是硬盘,明确2:因为是媒体文件,所以都是字节
* c; 需要高效,所以用到缓冲流;
*/
public static void main(String[] args) throws IOException {
//把一个目录封装成对象便于操作
File file = new File("E:\\360Download");
File[] files = file.listFiles();
//建立读取流跟读入流
BufferedInputStream bufs =null;
BufferedOutputStream bufw =null;
new BufferedOutputStream( new FileOutputStream("E:\\My piture"));
read_Test(file,files,bufs,bufw);
}
public static void read_Test(File file ,File[] files,BufferedInputStream bufs,BufferedOutputStream bufw) throws IOException {
for(File names: files)
{
if(names.isDirectory())
{
read_Test(names,files,bufs,bufw);//已经获取一个目录下所有的文件名字,包括子目录下的
}
//System.out.println(names); //但是发现目录中还有目录,所以考虑用递归
else
{
if(names.isFile())
{
bufs=new BufferedInputStream( new FileInputStream(names));
bufw =new BufferedOutputStream( new FileOutputStream("E:\\My piture"));
byte[] by = new byte[1024*1024];
int len =0;
while((len=bufs.read(by))!=-1)
{
bufw.write(by, 0, len);
bufw.flush();
}
bufs.close();
bufw.close();
}
}
}
}
}
作者:
黑马陈旭东
时间:
2012-6-13 21:48
很久了!怎么还没高人呢
作者:
郭宁
时间:
2012-6-13 22:01
简单看了一下,递归有点乱!等会给你写一个
作者:
郭宁
时间:
2012-6-13 23:01
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileTest1 {
/**
* @param args
* @throws IOException
*/
/*
* 想要列出指定的目录下的所有内容。包含着子目录中的内容。
* 思路:
* 1:获取指定目录的内容
* a:因为目录下有子目录,所以考虑用到递归
* 2:将这些文件复制到一个文件中。
* a:用IO流
* b; 明确1:数据源和目的地都是硬盘,明确2:因为是媒体文件,所以都是字节
* c; 需要高效,所以用到缓冲流;
*/
public BufferedInputStream bufr;
public BufferedOutputStream bufw;
public static void main(String[] args) throws Exception {
new FileTest1().copy(new File("F:\\照片"));
}
public void copy(File files)throws Exception{
if(files.isDirectory()){
File[] file_list = files.listFiles();
for(File file:file_list){
//如果是文件夹,递归
if(file.isDirectory()){
copy(file);
}else{
//读取
bufr = new BufferedInputStream(new FileInputStream(file));
System.out.println("正在复制文件:"+file.getName());
bufw =new BufferedOutputStream( new FileOutputStream("E:\\My piture\\"+file.getName()));
byte[] b = new byte[1024];
int len ;
while((len = bufr.read(b))!=-1){
bufw.write(b, 0, len);
bufw.flush();
}
//关闭读取流
bufr.close();
bufw.close();
//删除文件
if(file.delete()){
System.out.println("删除成功");
}
}
}
}
}
}
复制代码
核心就这几行代码~
你想分类啊 什么的 只要略加修改就可以了
作者:
伊文龙
时间:
2012-6-14 00:13
package cn.ywl.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyPrctureToNew {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File filesrc = new File("F:\\一些图片");
File filedes = new File("F:\\Mypicture");
copyToNew(filesrc,filedes);
}
/**
* @param filesrc
* @param filedes
* @throws IOException
*
* 思路是一遍遍历目录下的每一个文件,判断是否是图片,如果是,拷贝到指定目录下
*
*/
private static void copyToNew(File filesrc , File filedes) throws IOException {
File[] files = filesrc.listFiles();
FileInputStream fin = null;
FileOutputStream fos = null ;
for(File file:files){
if(file.isFile()){
String filename = file.getName();
String extendsname = filename.substring(filename.lastIndexOf('.')+1).toLowerCase();
if(extendsname.equals("bmp")||extendsname.equals("jpg")||extendsname.equals("jpeg")||extendsname.equals("png")||extendsname.equals("gif")){
try {
fin = new FileInputStream(file);
File des = new File(filedes.getAbsolutePath()+"\\"+filename);
des.createNewFile();
fos = new FileOutputStream(des);
int len = 0;
byte[] buf = new byte[1024];
while((len = fin.read(buf))!= -1){
fos.write(buf, 0, len);
}
//file.delete(); // 如要要剪切,就把这句的注释取消;
} catch (Exception e) {
e.printStackTrace();
}finally{
fin.close();
fos.close();
}
}
}else{
copyToNew(file,filedes);
}
}
}
}
复制代码
作者:
伊文龙
时间:
2012-6-14 00:18
图片的扩展名可能是大写的,所以我在获取扩展名的时候统一改成小写了。
还有,别忘了关IO流,不然会有意想不到的错误。
其他注意点我想也没神马了。就是递归遍历文件夹。是文件就访问测试下,是文件夹就进入递归调用。
作者:
赵兵锋
时间:
2012-6-14 04:24
如果不限定使用的编程语言的话……
假设在D盘根目录下有a文件夹,a里面有很多子文件夹,子文件夹里面可能还有子文件夹,很多图片就分散在这些子孙文件夹中,现在要将这些图片都剪切到D盘根目录下b文件夹里,b此时是空的。
方法:运行->cmd,输入命令 for /r D:/a %1 in (*.jpg) do move %1 D:/b 回车即可,若还有其他格式文件夹,把括号里面的改一下,就行了。此举完成之后,a下面所有所有图片都到b里面去了。
作者:
邓杰
时间:
2012-6-14 11:32
以前也一直想写一个类似的程序来把我电脑里的文件分类整理;今天看你在求助,我就试了试;
擦!!花哥三个多小时;看来真是很不熟练啊;不过好坏写出来了;已经通过测试;希望可以帮到你;
老师看能不能多给点分啊;实在太辛苦了;
不多说 直接上代码:
/*
思路
1 遍历A文件夹;
2 判断A文件夹中的文件类型;如果是文件夹遍历;
3 如果是自己要复制的文件类型则复制;为了功能扩展用字节流;
4 为了提高效率;使用缓冲区;
*/
import java.io.*;
class CopyDirFile
{
public static void main(String[] args) throws Exception//关于异常我就不处理了啊;太耽误时间了;
{
//new BianLiDir().showDir("D:\\Java\\studyNote\\");
new BianLiDir("D:\\Java\\studyNote\\","f:\\myjava\\").showDir();
}
}
class BianLiDir
{
private static String outdir;//需要写入的目标文件夹;
private static String indir;//需要被扫描目标文件夹;
BianLiDir(String indir,String outdir)
{
this.indir=indir;
this.outdir=outdir;
}
public static void showDir()throws Exception//函数重载 方法调用;
{
showDir(indir);
}
public static void showDir(String indir)throws Exception//函数重载
{
File dir=new File(indir);
showDir(dir);
}
public static void showDir(File dir)throws Exception
{
//File dir=new File(indir);
File[] files=dir.listFiles();
for (int x=0;x<files.length ;x++ )
{
if (files[x].isDirectory())//判断该文件是否是一个目录;
{
showDir(files[x]);
}
else //如果不是一个目录
{
String Filename=files[x].getName();//获取该文件的名称;
if (Filename.endsWith(".jpg"))//判断是否是一个图片文件;可以多重判断因为图片的类型不只一种。你就自己写了哈;
//不只是图片可以改为你想copy的任意文件;本应该定义一个变量来记录“.jpg”不过实在耽误了太时间;
//你就自己弄吧;
{
String pathName=dir.getCanonicalPath();//获取文件的路径
//调用CopyFile的copy的方法;把文件复制到指定的文件夹中;
//new CopyFile().copy(pathName+"
\\"+Filename,"f:\\myjava\\"+Filename
);
new CopyFile().copy(pathName+"
\\"+Filename,outdir+Filename
);
//如果要执行剪切功能可以在此处添加dir.delete();复制完成后删除原谅件;
//慎用:未测试 且不经过回收站;
//System.out.println(pathName+Filename);
}
}
}
}
}
class CopyFile//此类是复制动作;
{
private static FileOutputStream fos= null;
private static FileInputStream fis = null;
private static String outdir;
private static String indir;
public static void copy(String indir,String outdir)
{
try
{
fos=new FileOutputStream(outdir);
fis=new FileInputStream(indir);
byte[] buf=new byte[1024*10];
int len=0;
while ((len=fis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
try
{
if (fos!=null)
{
fos.close();
}
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
try
{
if (fis!=null)
{
fis.close();
}
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
}
}
}
作者:
邓杰
时间:
2012-6-14 11:36
代码经过反复修改。有的仅供测试和验证的代码注释忘记删了;希望不会影响到你;
作者:
黑马陈旭东
时间:
2012-6-14 21:18
邓杰 发表于 2012-6-14 11:36
代码经过反复修改。有的仅供测试和验证的代码注释忘记删了;希望不会影响到你; ...
哥们很给力!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2