Javaの09の実験(ストリームファイル)

最初の実験

0バイトストリームとバイナリファイル

1.バイナリファイルstudent.dataにDataOutputStreamはとのFileOutputStream学生対象

  • バイナリとテキストファイルの違い
  • してみてください...キャッチ...最後に注意事項

    2.使用try..with ... resoucesは、リソースを閉じます

    3. FileInputStreamのDataInputStreamの情報は、学生から読み取られたオブジェクトstudent.dataに集合します

私のコード

package homework;


import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

class Student {
       private int id;
       private String name;
       private int age;
       private double grade;    
       public Student(){
           
       }
       public Student(int id, String name, int age, double grade) {
          this.id = id;
          this.setName(name);
          this.setAge(age);
          this.setGrade(grade);
      }
      public int getId() {
          return id;
      }
      public void setId(int id) {
          this.id = id;
      }
      public String getName() {
          return name;
      }
      public void setName(String name) {
          if (name.length()>10){
              throw new IllegalArgumentException("name's length should <=10 "+name.length());
          }
          this.name = name;
      }
      public int getAge() {
          return age;
      }
      public void setAge(int age) {
          if (age<=0){
              throw new IllegalArgumentException("age should >0 "+age);
          }
          this.age = age;
      }
      public double getGrade() {
          return grade;
      }
      public void setGrade(double grade) {
          if (grade<0 || grade >100){
              throw new IllegalArgumentException("grade should be in [0,100] "+grade);
          }
          this.grade = grade;
      }
      @Override
      public String toString() {
          return "Student [id=" + id + ", name=" + name + ", age=" + age + ", grade=" + grade + "]";
      }
      
  }
   public class Main {
          public static void main(String[] args)
          {
              
              String fileName="d:\\student.data";
              try(DataOutputStream dos=new DataOutputStream(new FileOutputStream(fileName)))
              {
                  Student[] stu=new Student[3];
                  stu[0]=new Student(1,"zhangsan",19,65.0);
                  stu[1]=new Student(2,"lisi",19,75.0);
                  stu[2]=new Student(3,"wangwu",20,85.0);
                  for(Student stu1:stu) {
                      dos.writeInt(stu1.getId());
                      dos.writeUTF(stu1.getName());
                      dos.writeInt(stu1.getAge());
                      dos.writeDouble(stu1.getGrade());
                  }
                  
              } catch (FileNotFoundException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();

              }
              try(DataInputStream dis=new DataInputStream(new FileInputStream(fileName)))
              {
                  while(dis!=null) {
                      int id=dis.readInt();
                      String name=dis.readUTF();
                      int age=dis.readInt();
                      double grade=dis.readDouble();
                      Student stu=new Student(id,name,age,grade);
                      System.out.println(stu);
                  }
                  
                  
              } catch (FileNotFoundException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
                  
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
           
             }
             
        }
   }

私の概要

二进制文件与文本文件的区别:
广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件与文本文件的比较:
1. 能存储的数据类型不同:文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。
2. 每条数据的长度不同:文本文件每条数据通常是固定长度的。以ASCII为例,每条数据(每个字符)都是1个字节。二进制文件每条数据不固定。如short占两个字节,int占四个字节,float占8个字节。
3. 读取的软件不同:文本文件编辑器就可以读写。比如记事本、NotePad++、Vim等。二进制文件需要特别的解码器。比如bmp文件需要图像查看器,rmvb需要播放器。
4. 操作系统对换行符('\n')的处理不同(不重要):文本文件,操作系统会对'\n'进行一些隐式变换,因此文本文件直接跨平台使用会出问题。在Windows下,写入'\n'时,操作系统会隐式的将'\n'转换为"\r\n",再写入到文件中;读的时候,会把“\r\n”隐式转化为'\n',再读到变量中。在Linux下,写入'\n'时,操作系统不做隐式变换。

文字とテキストファイルの1ストリーム:使用のPrintWriter(書き込み)、BufferedReaderの(読み)

タスク:

UTF-8学生情報でエンコードされたテキストファイルから1 BufferedReaderのを読み出し、その後、目標出力に組み込まれます。

  • 中国のゴミ問題(FileReaderのシステムを使用してファイルを読むためにエンコードするデフォルトは、文字化け、あなたが解決にInputStreamReaderを使用することができます生成されます)
  • スペースの\ S + A複数を使用して文字列の分割方法は、セパレータとして使用することができます。
  • 高度:変更Students.txtファイルには、あなたから扱うことができるように、その手順を変更し、データの行の途中で正しいエラー行を追加します(例えば、たった3行あたりのデータ、または場所の他のデジタル文字に配置する必要があります)問題のある行(エラーが、実行し続けることができます)。

    2.書き込みパブリック静的のListreadStudents(文字列fileNameに);テキストファイルを指定したファイルからのすべての学生を読んで、リストにそれを置きます

    3.学生オブジェクトのPrintWriterは、テキストファイル、以下に示す基本的なコードを記述します。注:バッファの問題。

    4.のObjectInputStream / ObjectOutputStreamの書き込み学生対象。

私のコード

package homework;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
          public static void main(String[] args) throws IOException
          {
              String FileName="D:\\TSBrowserDownloads\\Students.txt";
              BufferedReader br = null;
              try {
                  br = new BufferedReader(new InputStreamReader(new FileInputStream(FileName),"UTF-8"));
                  String line = null;
                  while((line=br.readLine())!=null)
                     System.out.println(line);
             } finally{
                 if (br!=null){
                     br.close();
                 }
             }
         }
 
     }

私の概要

1.在编译过程中总是会出现很多错误,首先是头文件的问题,还有就是一些错误的提示,不知道怎么去改正,这方面学习的不好,通过同学才明白。
2.还有就是做题中会用到的一些知识点。

2.ストリームバッファ(JUintを用いた結合試験)

範囲[0,10]内のランダムな整数の100万行に書かれたのPrintWriterファイルを使用します。する100乱数シード
その後、整数に変換した後、行ごとのファイルから読み出します。順次出力「と平均数(5つの小数点以下)。」
コントラストは、この方法は、スキャナを使用してBufferedReaderのを使用してファイルから高速で使用する(だけではなく、出力を読んで)データを読み込みますか?

  • JUnitの利用効率の比較BufferedReaderのは、スキャナでファイルを読み込みます
  • 出力フォーマット:System.out.format。
  • それ以外の場合は、例外がスローされます、場合、ファイルの終わりを告げるためにスキャナhasNextXXXの方法を使用します。
  • この方法は、使用、または感受性でasNextXXX nextXXX対応する方法をスキャナべきです。
  • 失敗の削除(「未実装」);;およびテストするための方法にマーク@Testを使用してください。

私のコード

 package homework;

public class test {
     @Test
          public void test() {
          String FILENAME = "test.txt";
          long begin = System.currentTimeMillis();
          Scanner scanner=null;
          try {
              scanner = new Scanner(new File(FILENAME));
              while(scanner.hasNextLine()){//只是读出每一行,不做任何处理
                 scanner.nextLine();
             }
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         }finally{
             scanner.close();
         }
       long end = System.currentTimeMillis();
        System.out.println("last "+(end-begin));
         System.out.println("read using Scanner done");
     }
     @Test
     public void Bufftest() {
         String FILENAME = "test.txt";
         long begin = System.currentTimeMillis();
         BufferedReader br = null;
         try {
              br = new BufferedReader(new FileReader(new File(FILENAME)));
             while(br.readLine()!=null){};//只是读出,不进行任何处理
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                 br.close();
             } catch (IOException e) {
                 e.printStackTrace();           }
        }
        long end = System.currentTimeMillis();
         System.out.println("last "+(end-begin));
         System.out.println("read using BufferedReader done");
     }
}

私の概要

总体来说使用Scanner读取文本文件要比用BufferedReader更容易,而且,Scanner具有比BufferedReader更多的方法。

質問:
結果のファイルサイズは、次のコードは0である、とされたのはなぜときにのみ、カウント= 16384(デフォルトのバッファサイズ2回)、それが実際にファイルに書き込むことができます前に?

文字列fileNameが"D:/Test.dataを" =;
int型のカウント数= 16383;
PrintWriterのPW = NULL;
{しようと
PW =新しいPrintWriter(fileNameに);

for (int i = 0; i < count; i++) {
    pw.print(1);
}

}キャッチ(にFileNotFoundException電子){
e.printStackTrace();
}最後に{
//pw.close()。
}

回答:

第二の実験

バイトストリームの流れの3オブジェクト

組み合わせたObjectOutputStream、ObjectInputStreamのとFileInputStreamを、FileOuputStreamは、学生オブジェクトに読み込みと書き込み。
次の2つのメソッドを書きます:

  • 公共の静的な無効writeStudent(リストstuList)
  • パブリック静的リストreadStudents(文字列fileNameに)
    高度:
    使用wxMEdit開いているファイル形式は、生成したObjectOutputStream、ファイルを読み込むことによって、ファイル、コードと検証を変更してみてください。

私のコード

public static void writeStudent(List<Student> stuList)
 2     {
 3         String fileName="D:\\Student.dat";
 4         try (   FileOutputStream fos=new FileOutputStream(fileName);
 5                 ObjectOutputStream ois=new ObjectOutputStream(fos))
 6         {
 7             ois.writeObject(stuList);
 8             
 9         } 
10         catch (FileNotFoundException e) {
11             // TODO Auto-generated catch block
12             e.printStackTrace();
13         } catch (IOException e1) {
14             // TODO Auto-generated catch block
15             e1.printStackTrace();
16         }
17     }
18 public static List<Student> readStudents(String fileName)
19     {
20         List<Student> stuList=new ArrayList<>();
21         try (   FileInputStream fis=new FileInputStream(fileName);
22                 ObjectInputStream ois=new ObjectInputStream(fis))
23         {
24             stuList=(List<Student>)ois.readObject();
25         } 
26         catch (FileNotFoundException e) {
27             // TODO Auto-generated catch block
28             e.printStackTrace();
29         } catch (IOException e1) {
30             // TODO Auto-generated catch block
31             e1.printStackTrace();
32         } catch (ClassNotFoundException e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }
36         return stuList;
37     }   

私の概要

1.ObjectOutputStream的使用
- ObjectOutputStream是一个高级流, 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
2.ObjectInputStream的使用
- ObjectInputStream也是一个高级流,对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
3.ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。ObjectOutputStream用于序列化对象,ObjectInputStream 用于恢复那些以前序列化的对象(反序列化)。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。

4.选做:のRandomAccessFile

その動作の配列として、ファイルの内容を操作します。
読み取りと書き込みの多くのRandomAceessFileを使用して学生のオブジェクトより。
特別アセスメント:ドゥあなたはのRandomAccessFileの使用は、バイトストリーム、文字ストリーム、比較どのような長所と短所それぞれのストリームバッファを使用して読み取りと書き込みのファイルだと思います。

私のコード

私の概要

5.ファイル操作

1.書き込みフォルダ名を見つけるためにあなたが指定したファイル名が一致する表示されませんが見つからない場合は、そのディレクトリとサブディレクトリ内のすべてのファイルを検索し、ディレクトリとファイル名を指定することができますプログラム、それ以外の場合はすべてのファイル名とファイルが表示されます。

公共の静的な無効ファイル探索(パスのディレクトリ、書く文字列fileNameに) メソッドを。
全てのファイル名ディレクトリとそのサブディレクトリのルートディレクトリとして指定したパスをDIRするには
、すぐにコンソールにそれを発見した後、同じファイル名。
ヒント:
1.再帰またはキュー。推奨されるキューが完了しています。
2.グラフィカル・インターフェースを使用します。

  • GUIの下のコントロールはJFileChooserの選択したディレクトリを達成するために使用することができます。コンソールの下に手動でディレクトリ名を指定します。
    参照コード(参照コードのディレクトリ):

  • シンプルなメニューが含まれるGUIアプレットの.rar(JFileChooserのの使用を含みます)
  • FindDirectories.java(ファイルを見つけるための)
    高度(オプション):
    ファイル検索方法は、基本的に、あなたはシンボリックリンクを正しく扱えないなど、大きな欠陥を書かれています。
    評価ポイント:クエリデータは、ファイル検索のためのFiles.walkFileTreeメソッドを使用してみてください。

私のコード

if (args.length == 0) args = new String[] { ".." };
       try
        {
           File pathName = new File(args[0]);
           String[] fileNames = pathName.list();
  
           // enumerate all files in the directory
          for (int i = 0; i < fileNames.length; i++)
           {
             File f = new File(pathName.getPath(), fileNames[i]);
 
             // if the file is again a directory, call the main method recursively             if (f.isDirectory())
             {
                 if(f.getName().contains(fileName)) {
                     System.out.println(f.getCanonicalPath());
                     main(new String[] { f.getPath() });
                 }          
             }
          }
       }
       catch (IOException e)
       {
          e.printStackTrace();
       }

私の概要

1,Files.walkFileTree的原理介绍
原型:static Path Files.walkFileTree(Path start, FileVisitor<? super Path> visitor);
ii. 表示从start代表的节点开始遍历文件系统;
iii. 其中visitor是遍历过程中的行为控制器;
4) 遍历行为控制器——FileVisitor:
i. 它是一个接口,里面定义了4个方法用来指定当你访问一个节点之前、之中、之后、失败时应该采取什么行动;

6.正規表現

与えられた文字列は小数形式であるかどうかを確認する方法1.?プログラミングを検証してみます。
2. [変更HrefMatch.java

  • 文字列内のページ番号を一致させるようにしてください
  • 画像の文字列のためのWebを一致させるようにしてください
    2評価点です。

    私のコード

test
        {
           // get URL string from command line or use default
           String urlString;
           if (args.length > 0) urlString = args[0];
          else urlString = "http://cec.jmu.edu.cn";
 
           // open reader for URL
          InputStreamReader in = new InputStreamReader(new URL(urlString).openStream());
     //InputStreamReader in = new InputStreamReader(new FileInputStream("集美大学-计算机工程学院.htm"));
          // read contents into string builder
          StringBuilder input = new StringBuilder();
          int ch;
          while ((ch = in.read()) != -1)
             input.append((char) ch);
 
          // search for all occurrences of pattern
          String patternString = "<a\\s+href\\s*=\\s*(\"[^\"]*\"|[^\\s>]*)\\s*>";
      String patternImgString = "[+-]?[0-9]+";
     //String patternString = "[\u4e00-\u9fa5]";     //匹配文档中的所有中文
          Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
          Matcher matcher = pattern.matcher(input);
 
         while (matcher.find())
         {
             int start = matcher.start();
             int end = matcher.end();
             String match = input.substring(start, end);
             System.out.println(match);
          }
       }
       catch (IOException e)
       {
          e.printStackTrace();
       }
       catch (PatternSyntaxException e)
       {
         e.printStackTrace();
       }

私の概要

正则表达式是什么:正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法。

おすすめ

転載: www.cnblogs.com/20000519yxn/p/11938975.html