IO流指定文件的拷貝並修改文件名類型!我是新手,哪位大神給看看哪里出問題,給改一下,謝謝!



package com.baidu;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

/* 編寫一個程序,將控制台輸入的指定目錄下所有.java文件拷貝到另一個目錄中,並將擴展名改為.txt
 思路:
 1、用File對象封裝目錄
 2、通過listFiles()方法獲取該目錄下所有的文件或者文件夾的File對象數組
 3、遍歷這個File數組,得到每一個File對象
 4、判斷該File對象是否是文件
 a、如果是文件
 b、繼續判斷是否以.java結尾
 是:先改名后復制文件
 否:不復制
 */
public class Demo07 {

public static void main(String[] args) throws IOException {
// 用File對象封裝目錄
File src = getDir();
// 用File對象封裝目錄
File dest = getDir();
// 調用復制的方法
copyFile(src, dest);
}

// 復制方法
public static void copyFile(File src, File dest) throws IOException {
// 通過listFiles()方法獲取該目錄下所有的文件或者文件夾的File對象數組
File[] subFiles = src.listFiles();
// 遍歷這個File數組,得到每一個File對象
for (File subFile : subFiles) {
// 判斷該File對象是否是文件
if (subFile.isFile()) {
// 如果不是以java為后綴的不復制,執行下次循環
if (!subFile.getName().endsWith(".java")) {
continue;
} else {
// 新文件File對象//復制前改名
File newDir = new File(dest, subFile.getName().replace(".java", ".txt"));
// 用高效的字節輸入流封裝數據源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
// 用高效的字節輸出流封裝目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newDir));
byte[] arr = new byte[8 * 1024];
int len;
// 判斷是否讀到文件結尾
while ((len = bis.read(arr)) != -1) {
// 將數據寫到文件中
bos.write(arr, 0, len);
// 刷新緩存流
bos.flush();
}
// 關閉流對象
bis.close();
bos.close();
}
}
}
}
public static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個文件夾路徑");
while (true) {
String line = sc.nextLine();
File file = new File(line);
if (!file.exists()) {
System.out.println("您輸入的路徑不存在,請重新輸入!");
} else if (file.isFile()) {
System.out.println("您輸入的是文件的路徑,請輸入一個文件夾路徑!");
} else {
return file;
}
sc.close();
}
}
}

3 个解决方案

#1


錯誤信息貼一下

#2


引用 1 樓 defonds 的回復:
錯誤信息貼一下


不用了,謝謝了。
現在自己搞定了!

#3




package com.baidu;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Demo07 {
public static void main(String[] args) throws IOException {
// 用File對象封裝目錄
File src = getDir();
// 用File對象封裝目錄
File dest = getDir();
// 調用復制的方法
copyFile(src, dest);
}
// 復制方法
public static void copyFile(File src, File dest) throws IOException {
File newDir=new File(dest,src.getName());
newDir.mkdir();
// 通過listFiles()方法獲取該目錄下所有的文件或者文件夾的File對象數組
File[] subFiles = src.listFiles();
// 遍歷這個File數組,得到每一個File對象
for (File subFile : subFiles) {
// 判斷該File對象是否是文件
if (subFile.isFile()) {
// 如果不是以java為后綴的不復制,執行下次循環
if (!subFile.getName().endsWith(".java")) {
continue;
} else {
// 新文件File對象//復制前改名
File newFile = new File(newDir, subFile.getName().replace(".java", ".txt"));
// 用高效的字節輸入流封裝數據源
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(subFile));
// 用高效的字節輸出流封裝目的地
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] arr = new byte[8 * 1024];
int len;
// 判斷是否讀到文件結尾
while ((len = bis.read(arr)) != -1) {
// 將數據寫到文件中
bos.write(arr, 0, len);
// 刷新緩存流
bos.flush();
}
// 關閉流對象
bis.close();
bos.close();
}
}else{
copyFile(subFile,newDir);
}
}
}
public static File getDir() {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個文件夾路徑");
while (true) {
String line = sc.nextLine();
File file = new File(line);
if (!file.exists()) {
System.out.println("您輸入的路徑不存在,請重新輸入!");
} else if (file.isFile()) {
System.out.println("您輸入的是文件的路徑,請輸入一個文件夾路徑!");
} else {
return file;
}
sc.close();
}
}
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com