黑马程序员技术交流社区
标题:
编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
[打印本页]
作者:
bigworld
时间:
2014-8-22 16:17
标题:
编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
黑马测试题,还没有学到这。请问怎么做?
编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
作者:
沿途小将
时间:
2014-8-22 17:53
本帖最后由 沿途小将 于 2014-8-22 17:55 编辑
我只提供我的思路;
1,实例文件输入流关联你的.java文件,并读入程序【用到的类有FileReader或者FileInputStream】
2.实例文件输出流关联将要写入的.txt文件(没有的话会自动建立),将你第一步的数据写入、txt文件即可【用到的类有FileWriter或者FileOutputStream】
3,关闭两个流。(有异常)。
作者:
xplcc
时间:
2014-8-22 18:23
import java.io.*;
import java.util.*;;
import java.lang.*;
public class UpdateFile
{
public static void main(String[] args)throws IOException{
updateFile("指定目录", "拷贝目录");
}
/**
* 将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
*@param fileDir 文件路径 toDir 存放路径
*/
public static void updateFile(String fileDir, String toDir) throws IOException{
String filePath = fileDir.replaceAll("\\*", "/");
String updatePath = toDir.replaceAll("\\*", "/");
File file = new File(filePath);
if(file.listFiles()!=null){
for(File fileChild:file.listFiles()){
if(fileChild.getName().indexOf(".java")!=-1){
//设置新的扩展名
String fileName = fileChild.getName().substring(0,fileChild.getName().indexOf(".java")) + ".txt";
copy(fileChild,updatePath + "/" + fileName);
}
}
}
}
/**
* 复制文件到指定位置
*
*/
public static void copy(File fileChild, String fileDir)throws IOException{
File file = new File(fileDir);
FileInputStream is = new FileInputStream(fileChild);
FileOutputStream os = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while((len=is.read(buf))!=-1){
os.write(buf, 0, len);
}
os.flush();
is.close();
os.close();
}
}
复制代码
作者:
zhxu188
时间:
2014-8-22 18:27
这是刚刚写的代码,测试过可以通过,希望能帮到你,加油
作者:
zhxu188
时间:
2014-8-22 18:28
package com.heima.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
public class CopyTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
ArrayList<String> list = new ArrayList<String>();//定义集合存储Java文件的名字
File src = new File("D:\\test\\java"); //源文件路径
File des = new File("D:\\test\\txt"); //目的文件路径
if(!des.exists()) //判断目的文件是否存在,不存在就创建
des.mkdirs();
fileTolist(src,list); //将源文件中的Java文件的名字存入到集合中
for(String fileName : list){ //高级for循环遍历集合中Java文件的名字
writeTofile(src, des, fileName); //将源文件中的Java文件存入到目的文件夹中
}
}
//将源文件中的Java文件的名字存入到集合中
public static void fileTolist(File file,List<String> list){
File[] files = file.listFiles(); //获取源文件夹中的文件
for(File f : files){ //遍历文件并将文件的Java文件的名字存入到集合中
list.add(f.getName());
}
}
//将源文件中的Java文件存入到目的文件夹中
public static void writeTofile(File src,File des, String fileName)throws Exception{
BufferedReader bfr = new BufferedReader(new FileReader(new File(src, fileName)));
BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(des,fileName.replace(".java", ".txt"))));
String line = null;
while((line=bfr.readLine())!=null){
bfw.write(line);
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}
复制代码
作者:
c19t043
时间:
2014-8-22 18:49
先提供思路
!--遍历源文件下的所有.JAVA文件
!--创建读写流,new FileReader("源文件.java"),new FileWriter("目的路径+文件名.txt")
!--使用BufferReader.read,读文件,BufferWriter,write写文件
!--循环3.的操作
!--关闭缓存,br.close(),bw.close()
作者:
小僧玄奘
时间:
2015-1-10 18:10
学习。。。
作者:
rehan
时间:
2015-3-1 17:43
将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
作者:
xiaodaodan
时间:
2015-5-13 23:09
package examText;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
/**
* 9、 编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
*/
public class Test9 {
public static void main(String[] args) throws Exception{
ArrayList<String> list = new ArrayList<String>();//定义集合存储Java文件的名字
File src = new File("E:\\JAVA\\黑马\\exam.doc");//源文件路径
File des = new File("E:\\JAVA\\黑马\\txt"); //目的文件路径
if(!des.exists())//判断目的文件是否存在,不存在就创建
des.mkdirs();
fileTolist(src,list);//将源文件中的Java文件的名字存入到集合中
for(String fileName : list){//高级for循环遍历集合中Java文件的名字
writeTofile(src, des, fileName);//将源文件中的Java文件存入到目的文件夹中
}
}
//将源文件中的Java文件的名字存入到集合中
public static void fileTolist(File file,List<String> list){
File[] files = file.listFiles();//获取源文件夹中的文件
for(File f : files){//遍历文件并将文件的Java文件的名字存入到集合中
list.add(f.getName());
}
}
//将源文件中的Java文件存入到目的文件夹中
public static void writeTofile(File src,File des, String fileName)throws Exception{
BufferedReader bfr = new BufferedReader(new FileReader(new File(src, fileName)));
BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(des,fileName.replace(".java", ".txt"))));
String line = null;
while((line=bfr.readLine())!=null){
bfw.write(line);
bfw.newLine();
bfw.flush();
}
bfw.close();
bfr.close();
}
}
作者:
lolser
时间:
2015-6-1 15:38
package exam;
import java.io.*;
/*
* 3、编写程序,将指定目录下所有的.java文件拷贝到另一个目的中,将扩展名改为.txt
*/
public class Test3 {
public static void main(String[] args) throws IOException {
demo();
}
public static void demo() throws IOException{
File file=new File("H:\\t");
FileWriter fw=new FileWriter("H:\\txt\\2.txt");
File arr[]=file.listFiles();
for(File a:arr){
if(a.toString().endsWith(".java")){
System.out.println(a);
fw.write(a.toString());
}else{
System.out.println("没有jpg文件");
break;
}
}
fw.close();
}
}
复制代码
作者:
gaoming971366
时间:
2015-7-22 13:32
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
public class TextCopy {
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner scan =new Scanner(System.in);
System.out.print("请输入文件的路径及名称:");
String file=scan.next();
File tempFIle=new File(file.trim());
String fileName=tempFIle.getName();
sop("文件为:"+fileName);
BufferedReader bufr=null;
BufferedWriter bufw=null;
try
{
bufr=new BufferedReader(new FileReader(file));
bufw=new BufferedWriter(new FileWriter("F:Copy.java"));
String line=null;
while((line=bufr.readLine())!=null)
{
sop(line);
bufw.write(line);
bufw.newLine();
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(bufr!=null)
bufr.close();
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
if(bufw!=null)
bufw.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
sop("文件复制成功");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
今天上午刚写的,希望对你有帮助
作者:
梦龙0201
时间:
2015-9-12 09:18
各路大神真是太厉害了
作者:
tsldxszd
时间:
2016-1-12 02:46
本帖最后由 tsldxszd 于 2016-1-12 03:03 编辑
import java.io.*;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
/**
* 复制 D:中所有的.java 文件并改其后缀名为.txt 黏贴到 桌面上,当然可以是任何地方,
* 、只是我懒得做这无聊 的事了。
*
* 这个代码实现了以下功能,
* 1:不是指定某个文件夹 ,其范围可以大到搜索整个C或D或E盘里的 所有.java文件,
* 2:而不是单纯的复制黏贴 某一个 .java文件。不限制拷贝的文件个数,测试中 拷贝
* 了27个 D盘某 文件 夹中的.java文件,
* 3:用FileChannel 传输 ,大大 提高 了传输 速度。27个文件秒速到桌面
* 4:使用map集合只用2个函数就完成了所有的基本功能
*
* 收获:1:学习了map的遍历,因为 习惯了foreach,所以很不适应 map
* 2:学到了FileChannel ,效率提升太明显了。
* 3:加强了对 IO 流的理解和学习,尤其是File类的提高,改名字这里卡了二个小时,拷贝到指定文件夹卡 了3个小时。。
* 4:再次复习了进入文件夹的代码。
*
*
* @author 姜淑一
*
*/
public class TestCopy2
{
public static void main(String[] args) throws IOException
{
// 让用户自己输入需要拷贝的文件夹
String s = forName();
File file = new File(s);
// 为了省代码,我定义在main里输入输出流
FileInputStream in = null;
FileOutputStream out = null;
// 这里必须用map集合,一个装file.getPath,一个装file.getName,因为只有map集合 才能存放两个String参数
// 这是 为了改变.java成.txt的必要条件,也是输入输出流不给力的地方
HashMap <String,String>map = new HashMap<String, String>();
// getfile方法是为了取出例如在D:盘中 所有 .java文件的绝对路径key和文件名value,存放 到map集合,为 copy方法做准备
// 里面还用递归的方法实现了排除文件夹找文件的方法
getFile(file ,map);
// 找到需要的所有.java文件后,通过对 map的遍历,一一对应的把key(绝对路径)传给Input,
// 把修改后的value(文件名)传给output,由于效率上考虑,在这里选择了
// java.nio.channels.FileChannel;用File对象.getChannel()获得传输通道
copy(in,out,map);
System.out.println("已经帮你把"+s+"中的所有.java文件改为.txt文件并拷贝到了桌面上");
}
public static String forName()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入您想复制的文件夹(格式如D:\\\\或者D:\\\\xxx\\\\)");
System.out.println("请注意,如果您输入的是c:\\或者D:\\,查找会比较慢");
String line = sc.nextLine();
sc.close();
return line;
}
public static void copy (FileInputStream in,FileOutputStream out,HashMap<String,String>map)
throws IOException
{
FileChannel o = null;
FileChannel i = null;
// 这个遍历的方法是利用entry来做的
for (Entry<String, String> entry : map.entrySet())
{
// 定义输入输出 流,输入流就是.java的路径,输出 流就是通过文件名修改过后的.txt的路径
in = new FileInputStream(entry.getKey());
out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\"
+entry.getValue().replace(".java", ".txt"));
// 获得out通道和in通道,对接传输
o = out.getChannel();
i= in.getChannel();
i.transferTo(0, i.size(), o);
}
}
public static void getFile(File file,HashMap<String,String>map)
{
// 递归去掉文件夹
File[] list = file.listFiles();
// 递归和for循环 的联用,递归判断listp
是否 文件夹,是文件夹,就继续进入。
// for循环控制文件比较的 次数,也就是给map赋值
if(list !=null)
{
for (int i = 0; i < list.length; i++)
{
if (list
.isDirectory())
{
getFile(list
,map);
}
// 只有结尾为.txt的文件 才添加路径和文件名到map集合中
else
{
if(list
.getName().endsWith(".java"))
{
String key =list
.getPath();
String value = list
.getName();
map.put(key,value);
}
}
}
}
}
}
作者:
lishihao88
时间:
2016-5-26 18:28
本帖最后由 lishihao88 于 2016-5-26 18:33 编辑
package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class IO_Test {
/**
* 在控制台输入一个文件夹路径,将这个文件夹下的所有 .java文件拷贝到另一个文件夹并修改名字为 .txt
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File to = new File("D:\\TXT"); //创建目的文件夹路径
if(!to.exists()) { //判断目的文件是否存在,不存在就创建
to.mkdirs();
}
File dir = getDir(); //获取返回的路径
File [] arr = dir.listFiles(); //获取路径下所有文件
for (File f : arr) { //遍历文件数组
if(f.getName().endsWith(".java")) { //对每一个文件做判断是否是以.java结尾,是的话进入
String s = f.getName().replace(".java", ".txt"); //对文件进行改名
FileInputStream fis = new FileInputStream(f); //创建输入流
FileOutputStream fos = new FileOutputStream(new File(to,s));//创建输出流
int b ;
while((b = fis.read())!=-1) { //以下都是io流的核心代码
fos.write(b);
}
fis.close();
fos.close();
}
}
}
public static File getDir() {
Scanner sc = new Scanner(System.in); //创建键盘录入对象
System.out.println("请输入一个文件夹路径"); //温馨提示一下
while(true) { //循环判断输入的路径是否合法
String s = sc.nextLine(); //用字符串s记录一下输入的路径
File dir = new File(s); //创建File对象,传入s
if(dir.isFile()) { //对输入的路径做出判断,是否是文件路径
System.out.println("您输入的是一个文件路径,请输入一个文件夹路径");
}else if(!dir.exists()){ //是否存在
System.out.println("您输入的文件夹路径不存在");
}else { //返回一个正确的路径
return dir;
}
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2