DataOuputStream类:继承了OutputStream类,利用其可以操作基本数据类型
构造函数:
DataOutputStream(OutputStream out) 创建一个新的数据输出流,将数据写入指定基础输出流。
常用的方法:
writeXxx(Xxx x):Xxx为数据类型:将一个 x值写出到基础输出流中。
writeByte(byte b) writeInt(int i) writeDouble(Double d)
writeUTF(String str):以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
public class TestDataOutputStream { public static void main(String[] args) { try { FileOutputStream fos = new FileOutputStream("D:/ttt.txt"); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(10); dos.writeDouble(3.14); dos.writeChar('A'); dos.writeUTF("你好"); dos.flush(); dos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
DataInputStream类:继承了InputStream类,利用其可以操作基本数据类型
构造函数:
DataInputStream(InputStream in) 创建一个新的数据输入流,将数据读入指定基础输入流。
常用的方法:
readXxx():Xxx为数据类型:将一个 x值写出到基础输出流中。
readInt() readDouble() readChar()...
readUTF():从包含的输入流中读取此操作需要的字节。
public class TestDataInputStream { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("D:/ttt.txt"); DataInputStream dis = new DataInputStream(fis); int num = dis.readInt(); double pi = dis.readDouble(); char c = dis.readChar(); String str = dis.readUTF(); System.out.println(num); System.out.println(pi); System.out.println(c); System.out.println(str); dis.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
练习:
/** * 1.使用输入流读取标准答案和每个学生的答案 * 2.比较标准答案和学生答案进行判卷,并统计学员分数 * 3.将学员名称和分数输出到指定的文件中 * 技能点: * File 类 * FileReader/BufferedReader * FileWriter/BufferedWriter * String 类 * equals方法:比较内容是否相同 * substring(int begin,int end):字符串截取[begin,end) * indexOf(String s):索引指定字符第一次出现的下标位置 */ public class Homework2 { public static void main(String[] args) { try { File answerFile = new File("D:/test/answer/answer.txt");//保存标准答案的文件 File stusFile = new File("D:/test");//保存学生答案的文件夹 File resultFile = new File("D:/test/result/result.txt");//保存答案的文件 FileWriter fw = new FileWriter(resultFile); BufferedWriter bw = new BufferedWriter(fw); //获取学生答案 File[] stus = stusFile.listFiles(); for (File file : stus) { int score=0;//统计学生分数 if(file.isFile()){//判断是否为文件 FileReader anwserFr = new FileReader(answerFile); BufferedReader answerBr = new BufferedReader(anwserFr); String studentName = file.getName(); String name = studentName.substring(0,studentName.indexOf(".")); FileReader stuFr = new FileReader(file); BufferedReader stuBr = new BufferedReader(stuFr); String stuAnswer; while((stuAnswer=stuBr.readLine())!=null){//读取学生答案 String answer = answerBr.readLine();//读取标准答案 // System.out.println(stuAnswer+"\t"+answer); if(answer.equals(stuAnswer)){ score+=10;//计算学生得分 } } //将学生的成绩和姓名写入到result.txt中 bw.write(name+"\t"+score); bw.newLine(); bw.flush(); //释放资源 stuBr.close(); stuFr.close(); answerBr.close(); anwserFr.close(); } } bw.close(); fw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
练习—文件复制
/** *完成文件的夹的复制(该文件下的所有文件或文件夹) *技能:流+递归+文件的操作 *1.文件夹的复制(创建) *2.文件夹下文件的复制(IO的操作) * 流:字节流 * * */ public class Homework1 { /** * 文件的复制 * @param sourceFile:源文件 D:/mp3/aa.mp3 * @param destFile:目标文件 F:/mp3/aa.mp3 */ public static void copyFile(File sourceFile,File destFile){ FileInputStream fis =null; FileOutputStream fos=null; BufferedInputStream bis =null; BufferedOutputStream bos=null; try { fis = new FileInputStream(sourceFile); fos = new FileOutputStream(destFile); bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); byte[] bs = new byte[1024]; int len; while((len=bis.read(bs))!=-1){ bos.write(bs, 0, len); } bos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { bos.close(); fos.close(); bis.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 文件夹的复制 * @param sourceDir:源文件夹 * @param destDir:目标文件夹 */ public static void copyDir(File sourceDir,File destDir){ //获取源文件夹的名称 String sourceName= sourceDir.getName(); //在目标文件夹中创建目录 File file = new File(destDir,sourceName); file.mkdirs();//创建文件夹 //获取源文件夹中的所有子文件(子目录) File[] sourceFiles = sourceDir.listFiles(); for (File sourceFile : sourceFiles) { //判断该文件是否为目录 if(sourceFile.isDirectory()){ copyDir(sourceFile,file); } if(sourceFile.isFile()){ File newFile = new File(file,sourceFile.getName()); //复制文件到目标文件夹中 copyFile(sourceFile,newFile); } } } public static void main(String[] args) { File sourceDir = new File("D:/mp3"); File desctDir = new File("F:/"); copyDir(sourceDir,desctDir); } }