黑马程序员技术交流社区
标题:
今天的面试题
[打印本页]
作者:
twtzhongxin
时间:
2014-3-13 17:55
标题:
今天的面试题
面试问题,将一个目录下的.java文件全部复制成.txt文件?
作者:
itpower
时间:
2014-3-13 18:14
import java.io.*;
/*
思路;
|-- 首先定义一个方法,用来copy单个文件,
|-- 创建一个带缓冲的字符读取流与源文件相关联
|-- 在创建一个带缓冲的字符写入流与目标文件相关联
|-- 完成读写操作
|-- 关闭资源
|-- 然后定义一个用来判断File对象是目录还是文件,用递归来遍历整个文件夹
|-- 如果是目录,就递归该目录
|-- 如果是文件就调用文件copy方法复制文件
*/
class CopyFilesDemo2
{
public static void main(String[] args)
{
File sour = new File("e:\\Open_Sourse");
File targ = new File("e:\\copy");
targ.mkdir();
findFile(sour,targ);
}
public static void findFile(File sour,File targ)
{
File[] files = sour.listFiles();
for(File file:files)
{
if(file.isDirectory())
{
String dir = file.getName();
File newFile = new File(targ+"\\"+dir);
newFile.mkdirs();
findFile(file,newFile);
}
else
{
try
{
if(file.getName().endsWith("java"))
{
String fileName = file.getName();
String[] newFileName = fileName.split("\\.");
File new2File = new File(targ+"\\"+newFileName[0]+".txt");
new2File.createNewFile();
copyFile(file,new2File);
}
}
catch (IOException e1)
{
e1.printStackTrace();
throw new RuntimeException("文件复制失败!");
}
}
}
}
public static void copyFile(File sour,File targ)
{
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
if(!sour.isFile())
throw new RuntimeException("sour不是一个文件");
fis = new FileInputStream(sour);
fos = new FileOutputStream(targ);
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
e.printStackTrace();
throw new RuntimeException("文件复制失败!");
}finally
{
try
{
if(fis != null)
fis.close();
}
catch (IOException efr)
{
efr.printStackTrace();
}
try
{
if(fos != null)
fos.close();
}
catch (IOException efw)
{
efw.printStackTrace();
}
}
}
}
复制代码
作者:
Teale
时间:
2014-3-13 22:22
itpower 发表于 2014-3-13 18:14
第31行 为什么是 File newFile=new File(targ+"\\"+dir);??
这个文件就算是个目录,那也是sour目录里,你这改了之后路径不对了啊??newFile.mkdirs();也不会有文件啊,这个目录是新复制的文件夹。都还没复制过去文件呢。。。怎么递归的出来
作者:
1844611785
时间:
2014-3-13 23:30
package day01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class CopyFilesDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
File source = new File("F:\\java基础");
File target = new File("F:\\copy");
target.mkdir();
findFile(source,target);
}
private static void findFile(File source, File target) {
File[] files = source.listFiles();
for(File file :files){
if(file.isDirectory()){
String dir = file.getName();
/* System.out.println(dir);*/
File newFile = new File(target+"\\"+dir);
newFile.mkdir();
/*System.out.println(newFile.getName());*/
findFile(file,newFile);
}
else{
try{
if(file.getName().endsWith("java")){
String fileName = file.getName();
String[] newFileName= fileName.split("\\.");
File new2File= new File(target+"\\"+newFileName[0]+".txt");
new2File.createNewFile();
copyFile(file,new2File);
}
}catch(Exception e){
System.out.println("修改文件失败");
}
}
}
}
private static void copyFile(File source, File target) {
FileInputStream fis = null;
FileOutputStream fos = null;
try{
if(!source.isFile())
throw new RuntimeException("source 不是一个文件");
fis = new FileInputStream(source);
fos =new FileOutputStream(target);
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1){
fos.write(buf, 0, len);
}
}catch(Exception e){
System.out.println("文件复制失败");
}finally{
try{
if(fis!=null)
fis.close();
if(fos!=null)
fos.close();
}catch(Exception e){
System.out.println("读取或存储失败");
}
}
}
}
复制代码
作者:
何伟超
时间:
2014-3-13 23:46
nizhenxingyun
作者:
75100313
时间:
2014-3-14 07:07
itpower 发表于 2014-3-13 18:14
为何不用buffer?
作者:
Teale
时间:
2014-3-14 12:30
终于写出来了 {:3_49:} 刚学伤不起。 因为找不到JAVA文件做测试。。用创建的TXT改成JAVA后缀名,查找的时候还是把它们当了TXT。。。遇到无数挫折 囧。。 就把题目换成TXT变JAVA了
package 练习;
import java.io.*;
import java.util.*;
public class 面试题1 {
private static List<File> list=new ArrayList(); //公用的list集合,先存再取
public static void main(String[] args){
findTxt(new File("C:\\Users\\Administrator\\Desktop\\JAVA基础笔记\\源")); //存放TXT的地址
copyJava(new File("C:\\Users\\Administrator\\Desktop\\JAVA基础笔记\\复制")); //要放复制的JAVA地址
}
public static void copyJava(File file){
if(!(file.isDirectory())){
try{ //这边异常就不处理了。。偷懒下
file.mkdir(); //如果目录不存在,就创建这个文件夹
}catch(Exception e){}
}
for(File file1: list){ //高级for把存了File的list遍历
String name=file1.getName();
String[] name1=name.split(".txt"); //因为要存为JAVA文件,所以去除.txt的后缀
String newName=name1[0]+".java"; //在后缀添上.java成为新的文件名
try{
BufferedReader bufr=new BufferedReader(new InputStreamReader(new FileInputStream(file1))); //一顿读遍历出来的TXT文件
PrintWriter pw=new PrintWriter(file+"//"+newName); //目的是传递进来的file文件夹里的新文件名
byte[] buf=new byte[1024];
String line=null;
while((line=bufr.readLine())!=null){
pw.println(line);
}
bufr.close();
pw.close();
}catch(Exception e){}
}
}
public static void findTxt(File file){ //先看这里,传入需要找的文件夹绝对地址。
if(file.isDirectory()){
File[] files=file.listFiles();
for(File file1 : files){
findTxt(file1); //递归, 找出所有文件
}
}
else{
if(file.getName().endsWith(".txt")){ //所有文件里最后带.txt的文件全部存到list集合中
list.add(file); //这里必须注意!!!花了快2个小时,就被这里坑了。list必须存File,
//开始存的list<String>=file.getabsolutepath,结果写不出来。原因是Windows文件是C:\xxx\xxx
//而JAVA 只认得 c:\\x\\或者 c:/xx/xx
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2