为了账号安全,请及时绑定邮箱和手机立即绑定

代码有点混乱

不能在讲到一个内容的时候,新建一个包把本节的代码放进里面,这样代码就不会那么混乱了,每个章节都有相应的包相应的代码这样好让学习者更快掌握

正在回答

4 回答

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class IOUtil {
 
 /**
  * 单字节读取
  * 不适合大文件,读取大文件效率很低
  * @param filename
  * @throws IOException
  */
 public static void printHex(String filename) throws IOException{
  FileInputStream in = new FileInputStream(filename);
  int b;
  int i = 1;
  while( (b=in.read())!= -1){
   if(b < 0xf){
    //单位数前面补0
    System.out.print("0");
   }
   System.out.print(Integer.toHexString(b)+"  ");
   i++;
   if(i%10==0){
    System.out.println();
   }
  }
  in.close();
 }
 
 /**
  * 批量读取字节
  * 读取大文件,效率很高,也是最常用的读取文件的方法
  * @param filename
  * @throws IOException
  */
 public static  void printHexByByteArray(String filename) throws IOException {
  FileInputStream in = new FileInputStream(filename);
  byte buf[] = new byte[20*1024];
  //从in中批量读取字节,放到buf字节数组中,从第0个位置放,最多放buf.length个,返回的是读到的字节个数
  int b = in.read(buf, 0, buf.length);//一次性读完,说明字节数组足够大
  int j = 1;
  for(int i=0; i<b; i++){
   if(buf[i] <= 0xf){
    System.out.print(0);
   }
   System.out.print(Integer.toHexString(buf[i] & 0xff)+"  ");//byte只有8位,而int有32位,所以 & 0xff可以清除高位上的数
   if(j++%10==0){
    System.out.println();
   }
  }
  in.close();
 }
 
 public static void copyFileByByte(File src, File dst) throws IOException{
  if(!src.exists()){
   throw new IllegalArgumentException("文件"+src+"不存在!");
  }
  if(!src.isFile()){
   throw new IllegalArgumentException(src+"不是文件");
  }
  FileInputStream in = new FileInputStream(src);
  FileOutputStream out = new FileOutputStream(dst);
  int b = 0;
  while((b = in.read()) != -1 ){
   out.write(b);
  }
  in.close();
  out.close();
 }
 
 /**
  * FileOutputStream复制文件
  * 用字节数组批量读取文件
  * @param src
  * @param dst
  * @throws IOException
  */
 public static void copyFileByByteArray (File src,File dst) throws IOException{
  if(!src.exists()){
   throw new IllegalArgumentException("文件"+src+"不存在!");
  }
  if(!src.isFile()){
   throw new IllegalArgumentException(src+"不是文件");
  }
  FileInputStream in = new FileInputStream(src);
  /*
   * 当dst不存在时,会自动创建,如果存在,删除后在创建
   * 如果增加true,则不会删除原文件,会在原文件尾部写出新内容
   */
  FileOutputStream out = new FileOutputStream(dst,true);
  byte buf[] = new byte[10*1024];
  int b = in.read(buf);
  out.write(buf, 0, b);
  out.flush();
        in.close();
        out.close();
  
 }
 
 /**
  * DataOutputStream
  * @throws IOException
  */
 public static void dataOutputStream() throws IOException{
  String filename = "A/B.txt";
  DataOutputStream out = new DataOutputStream(new FileOutputStream(filename));
  out.writeInt(6);
  out.writeDouble(4.9);
  out.writeLong(8l);
  out.writeUTF("张基");//以utf-8写入
  out.writeChars("张基");//以utf-16be写入
  out.close();
  
 }
 
 /**
  * DataInputStream
  * @throws IOException
  */
 public static void dataInputStream() throws IOException{
  String filename = "A/B.txt";
  DataInputStream in = new DataInputStream(new FileInputStream(filename));
  int i = in.readInt(); 
  System.out.println(i);
  double j = in.readDouble(); 
  System.out.println(j);
  long k = in.readLong();
  System.out.println(k);
  String str1 = in.readUTF();
  System.out.println(str1);
  char c = '\0';
  while( (c = in.readChar() ) != '\0' ){
   System.out.print(c);
  }
  in.close();
 }
 
 /**
  * BufferedInputStream , BufferedOutputStream
  * 用带缓冲的字节流复制文件
  * @param src
  * @param dst
  * @throws IOException
  */
 public static void copyFileByBuffer(File src, File dst) throws IOException{
  if(!src.exists()){
   throw new IllegalArgumentException("文件"+src+"不存在!");
  }
  if(!src.isFile()){
   throw new IllegalArgumentException(src+"不是文件");
  }
  BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
  BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dst));
  int b = 0;
  while((b = in.read()) != -1){
   out.write(b);
   out.flush();//刷新缓冲区
  }
  in.close();
  out.close();
 }
 
 /**
  * InputStreamReader , OutputStreamWriter
  * 处理字符流
  * @param filename
  * @throws IOException
  */
 public static void isrAndOsw(File filename1,File filename2) throws IOException{
  InputStreamReader in = new InputStreamReader(new FileInputStream(filename1),"gbk");//项目默认编码
  OutputStreamWriter out =new OutputStreamWriter(new FileOutputStream(filename2),"gbk");
  /*int b;
  while((b=in.read()) != -1){
   System.out.print((char)b);
  }
  */
  char buf[] = new char[8*1024];
  int b;
  while((b=in.read(buf, 0, buf.length)) != -1){
   String s = new String(buf,0,b);
   System.out.print(s);
//   System.out.println(buf);
//   out.write(buf,0,b);
//         out.flush();
   out.write(s, 0, s.length());
   out.flush();
  }
  
  in.close();
  out.close();
 }
 
 /**
  * 文件读写流
  * @param f1
  * @param f2
  * @throws IOException
  */
 public static void frAndFw(File f1, File f2)throws IOException{
  FileReader fr = new FileReader(f1);
  FileWriter fw = new FileWriter(f2,true);//如果加上true,则会在f2的末尾追加内容,不会删除原内容
  char buf[] = new char[3*1024];
  int c = 0;
  while(( c = fr.read(buf, 0, buf.length) )!=-1){
   fw.write(buf, 0, c);
   fw.flush();
  }
  fw.write("\n");
  fw.close();
  fr.close();
 }
 
 /**
  * 字符流过滤器
  * @param f1
  * @param f2
  * @throws IOException
  */
 public static void brAnBwFilter(File f1, File f2,File f3) throws IOException{
  BufferedReader br = new BufferedReader(
    new InputStreamReader(
      new FileInputStream(f1)));
  BufferedWriter bw = new BufferedWriter(
    new OutputStreamWriter(
      new FileOutputStream(f2,true)));
//  PrintWriter pw = new PrintWriter(f3);
  PrintWriter pw = new PrintWriter(
    new OutputStreamWriter(
      new FileOutputStream(f3,true))); 
  String line;
  while( (line=br.readLine()) != null){//readLine()不能识别原文本中的换行
   bw.write(line);
   bw.newLine();//手动添加换行
   bw.flush();
   pw.println(line);
   pw.flush();
  }
  br.close();
  bw.close();
  pw.close();
 }
 }
import java.io.File;
import java.io.IOException;
public class IOUtil_Test {
 public static void main(String[] args) throws IOException {
        //IOUtil.printHex("A\\B.txt");
  
  /*
  long statime = System.currentTimeMillis();
  IOUtil.printHexByByteArray("A\\B.txt");
  System.out.println();
  long endtime = System.currentTimeMillis();
  System.out.println("读取时间:" + (endtime - statime) + "ms" );*/
  
        //IOUtil.copyFileByByteArray(new File("A\\B.txt"), new File("A\\B1.txt"));
  
  /*
  IOUtil.dataOutputStream();
  IOUtil.printHexByByteArray("A\\B.txt");
  System.out.println();
  */
  
  //IOUtil.dataInputStream();
  /*
  //1
  long start1 = System.currentTimeMillis();
  IOUtil.copyFileByByte(new File("A\\B1.txt"), new File("A\\bu1.txt"));
  long end1 = System.currentTimeMillis();
  System.out.println(end1-start1);
  //2
  long start2 = System.currentTimeMillis();
  IOUtil.copyFileByBuffer(new File("A\\B1.txt"), new File("A\\bu2.txt"));
  long end2 = System.currentTimeMillis();
  System.out.println(end2-start2);
  //3
  long start3 = System.currentTimeMillis();
  IOUtil.copyFileByByteArray(new File("A\\B1.txt"), new File("A\\bu3.txt"));
  long end3 = System.currentTimeMillis();
  System.out.println(end3-start3);*/
  
  
  //IOUtil.isrAndOsw(new File("A\\B1.txt"), new File("A\\isAndOsw.txt"));
  
  //IOUtil.frAndFw(new File("A\\B1.txt"), new File("A\\frAndFw.txt"));
  
  IOUtil.brAnBwFilter(new File("A\\B1.txt"), new File("A\\brAnBwFilter.txt"),
    new File("A\\brAndBwFilter1.txt"));
 }
}

上边是所有方法的类,下别是测试类

0 回复 有任何疑惑可以回复我~

你想表达的是老师把讲到的所有代码都写到一个包里的意思吧,你自己写的时候,可以合理的区分呀,比如创建一个包"io1"、"io2"(也就是IO专题1,IO专题2)之类的。

0 回复 有任何疑惑可以回复我~

这个老师讲得很有条理啊,那些文件的命名也很合理

0 回复 有任何疑惑可以回复我~

你要慢慢去掌握啊,学这个本来就不能急

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

代码有点混乱

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信