package day12.IO; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class MyIoTest { /** * 现在要求完成一个Copy程序,完全模仿DOS中的拷贝命令。 命令的运行形式,可以通过初始化参数的方式设置两个路径 · 形式:java Copy 源文件路径 目标文件路径 本程序完成有两个思路: · 思路一:将所有的内容全部读取进来,之后一次性保存 · 思路二:边读边写 而且要进行读取的时候还要判断源文件是否存在。 * @throws Exception */ public static void main(String[] args) throws Exception { createSrcFile();//先创建一个源文件 JavaCopyMingLing a = initial();//读入一个命令 MyCopy b =new MyCopy(a); b.copy(); } public static void createSrcFile() throws IOException, Exception { System.out.println("请输入要创建的源文件的绝对路径"); StringBuffer sb = new StringBuffer(); sb.append(new java.util.Scanner(System.in).next()); sb = changeTo(sb); System.out.println(sb); Thread.sleep(1000); String srcpath = new String(sb); File srcFile = new File(srcpath); //源文件不存在 就 创建一个新文件 if(srcFile.exists()); else { srcFile.createNewFile(); } System.out.println("请输入你要保存在"+srcpath+"中的内容 输入end并回车表示结束:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //定义输出流 BufferedWriter bw = new BufferedWriter(new FileWriter(srcFile));//定义输出流 String a = null; // 读入并写文件 while(!(a = br.readLine()).equals("end")) { bw.write(a+"\n"); bw.flush();//边读边写 } // br.close(); // bw.close(); System.out.println("文件保存成功"); } public static JavaCopyMingLing initial() throws IOException, InterruptedException { System.out.println("现在开始执行复制命令\n请输入格式为 java Copy 源文件路径 目标文件路径:"); String s = new String(); BufferedReader a = new BufferedReader(new InputStreamReader(System.in));//设定源读入端为consle s= a.readLine();//将读入的,命令存入s中 StringBuffer sb = new StringBuffer(s); int index = 0 ; while((index = sb.indexOf(" "))!=-1)//去除所有空格 sb.deleteCharAt(index); // System.out.println(sb); Thread.sleep(1000); if(sb.indexOf("java")!=0||sb.indexOf("Copy")!=4) //判断前两个参数是否输入正确 { System.out.println("请输入 java Copy 源文件路径 目标文件路径"); throw new RuntimeException("命令输入出错"); } //将源目地址取出 并进行转换 再转为String 最后用JavaCopyMingLing 这个类进行封装 String src = new String(changeTo(new StringBuffer(sb.substring(8,sb.lastIndexOf(":")-1)))); String des = new String(changeTo(new StringBuffer(sb.substring(sb.lastIndexOf(":")-1,sb.length())))); if(!new File(src).exists())//判断是否存在源文件 { System.out.println("源文件不存在或目录不正确"); throw new RuntimeException("命令输入出错"); } //目标文件是默认创建的 // if(!new File(des).exists()) // { // System.out.println("目标文件不存在或目录不正确"); // throw new RuntimeException("命令输入出错"); // } return new JavaCopyMingLing(src,des); } public static StringBuffer changeTo(StringBuffer sb) { int index = 0; //将windows输入的路径 转化为系统结构路径 while((index = sb.indexOf("/",index))!=-1) { sb.insert(index, "/"); // System.out.println(sb); index = index+2; } return sb; } }package day12.IO; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class MyCopy { JavaCopyMingLing a ; public MyCopy(JavaCopyMingLing a) { super(); this.a = a; } public JavaCopyMingLing getA() { return a; } public void setA(JavaCopyMingLing a) { this.a = a; } public void copy() { BufferedReader br = null; BufferedWriter bw = null; try{ br = new BufferedReader(new FileReader(new File(a.getSrc()))); File des = new File(a.getDes()); if(!des.exists()) des.createNewFile(); bw = new BufferedWriter(new FileWriter(des)); String a = null; while((a = br.readLine())!=null) { bw.write(a); bw.newLine(); } } catch(Exception e ) { e.printStackTrace(); } finally{ // 偷懒了 应该分别写trycatch的 try{ bw.close(); br.close(); } catch(Exception e) { e.printStackTrace(); } } } }
package day12.IO; public class JavaCopyMingLing { String a = "java"; String b = "Copy"; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getSrc() { return src; } public void setSrc(String src) { this.src = src; } public String getDes() { return des; } public void setDes(String des) { this.des = des; } String src = null; String des = null; public JavaCopyMingLing(String src, String des) { super(); this.src = src; this.des = des; } }
在 java控制台实现 类似java Copy srcpath despath这种DOS命令行的文件拷贝功能 文件IO StringBuffer
最新推荐文章于 2021-02-28 00:12:21 发布