イオフローエクササイズ
*流れの方向による:入力フロー、出力フロー
ファイルタイプに応じて分割:バイトストリーム、文字ストリーム
Ioフローの操作手順:
1。例外の処理
2.特定の読み取りと書き込み
3.フローを閉じる
一般的なフロー:
入力バイトストリーム:InputStream
出力バイトストリーム:OutputStream
ファイル入力バイトストリーム:FileInputStream
ファイル出力バイトストリーム:FileOutputStream
バッファー入力バイトストリーム:BufferedInputStream
バッファー出力バイトストリーム:BufferedOutputStream
入力文字ストリーム:FileReader
出力文字ストリーム:FilieWriter
バッファー入力文字ストリーム:BufferedReader
バッファー出力文字ストリーム:BufferedWriter
オブジェクト入力ストリーム:ObjectInputStream
オブジェクト出力ストリーム:ObjectOutputStream
一般的な方法:
read()コンピュータディスクからファイルを取り出します
write()値またはファイルをコンピュータディスク
に保存しますclose()ストリームを閉じます
newLine wrap
ファイル内外のオブジェクトのシリアル化と逆シリアル化
シリアル化:オブジェクトを一連のバイトに変換するプロセスは、オブジェクトのシリアル化と呼ばれます。(ファイルを保存するのが一般的です)逆シリアル化
:バイトシーケンスをオブジェクトに復元するプロセスは、オブジェクト逆シリアル化と呼ばれます。
シリアル化できるのは、SerializableおよびExternalizableインターフェースを実装するクラスのオブジェクトのみです。
public static void main(String[] args) throws Exception{
FileOutputStream fos = new FileOutputStream("E:\\A\\student.txt");
// 输出对象流
ObjectOutputStream oos = new ObjectOutputStream(fos);
Student s1 = new Student(1, "张三", 18, 16.0);
// 以序列化的形式,将对象写到文件 二进制文件
oos.writeObject(s1);
oos.close();
fos.close();
System.out.println("结束" );
}
演習1
ソース入力ストリームから一連のバイトを読み取り、それらをオブジェクトに逆シリアル化して返します。
public static void main(String[] args) throws Exception{
FileInputStream fis = new FileInputStream("E:\\A\\student.java");
// 输入对象流
ObjectInputStream ois = new ObjectInputStream(fis);
// 读取一个对象: 将字节反序列化为对象
Student o = (Student) ois.readObject( );
System.out.println(o );
ois.close();
}
演習2
学生オブジェクトを作成します
。attributesidsagesname score //メソッドaddOne(Student s、String file)を記述して、sの情報をターゲットファイルファイルに書き込みます。
各学生に1行:1001-HanMeimei-18-98.5
書き込みメソッドdeleteOne(int sid、String file)in the file指定された行datadelete sid
ファイルを入力および出力ストリームに関連付けることができないことに注意してください。
ソースファイルから読み取られた情報を変更するための中間ファイルが作成され、中間ファイルに書き込まれます。
ソースファイルを削除すると、中間ファイルに名前が変更されます
メソッドaddOne(Student s、String file)を記述して、sの情報を宛先ファイルファイルに書き込みます。
private static void addOne(Students s, String file) throws IOException {
//创建输出流
BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));
bw.write(s.getSid()+"-"+s.getSage()+"-"+s.getSname()+"-"+s.getScore());
bw.newLine();
//关流
bw.close();
}
演習3
//ファイル内の指定されたsidの行データを削除するメソッドdeleteOne(int sid、String file)を
記述しますprivate static void deleteOne(int i、String file)throws IOException {
File file1 = new File(file);
//输出流
BufferedReader br = new BufferedReader(new FileReader(file1));
//创建一个临时文件
File file2 = new File("E://A//f.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file2 ,true));
String c = null;
while ((c = br.readLine())!= null){
String s = c;
//根据给定字符拆分
String[] split = s.split("-");
System.out.println("拆分后字符串:"+ split[0]);
int a = Integer.parseInt(split[0]);
if (a==i){
continue;
}
bw.write(c);
bw.newLine();
}
//关流
br.close();
bw.close();
//删除原有的数据
boolean delete = file1.delete( );
System.out.println(delete );
//临时文件重命名
file2.renameTo(new File(file));
}
演習4:演習4:
デザインメソッド、ファイル/フォルダーパスを渡し、ファイル/フォルダーを削除します
//设计方法,传入文件/文件夹路径删除该文件,文件夹
public static void test(File file) {
//判断是否存在
if (file.exists()) {
//得到文件数组
File[] files = file.listFiles();
//遍历所有的子目录和文件
for (File f : files) {
//判断此抽象路径名表示的文件是否是一个标准文件。
if (f.isFile()) {
f.delete();//是文件就删除
} else {
test(f);//如果是文件夹就递归这里进入子文件夹中
}
}
file.delete();//删除文件夹
}
}
演習5
//宿題:設計法、整数nを渡し、階乗の結果を返す
public static int jc(int n){
if (n==1){
return 1;
}else {
return n * jc(n - 1);
}
}
演習6
パラメータファイル/フォルダのバイトサイズを取得するメソッドを記述します
public static void getLength(File file) {
//判断是否是标准文件
if(!(file.exists())){
//不是标准文件
System.out.println("文件路径错误");
}
//判断是否是文件夹
if(file.isDirectory()){
//得到文件数组
File[] files = file.listFiles();
//遍历文件数组
for (File f:files){
//递归
getLength(f);
}
}
a+=file.length();
}
演習7
設計方法:
Aフォルダー内のすべてのメモ帳ファイルを一覧表示します(文字列のサフィックスを判断します)
//全局静态属性,集合用来存储所有的文件名
static ArrayList<String> arrs = new ArrayList<>();
public static ArrayList job1(File file){
if(file.exists()) {
//获取文件数组
File[] files = file.listFiles();
//遍历文件数组,获得文件名
for (File f : files) {
//判断名字是不是。txt结尾
if (f.getName().endsWith(".txt")) {
arrs.add(f.getName());
} else {
job1(f);
}
}
return arrs;
}
System.out.println("文件路径错误");
return null;
}
演習8
フォルダAのすべてのファイルを削除します
private static void job2(File file) {
//判断该文件是否存在
if (file.exists()){
//得到文件数组
File[] files = file.listFiles();
//遍历所有子目录和文件
for(File f:files) {
//判断文件是不是一个标准文件
if (f.isFile()) {
//是的话删除该文件
f.delete();
} else {
//不是文件就递归到子文件夹里,进行删除文件
job2(f);
}
}
return;
}
System.out.println("文件路径错误");
}
演習9
指定したフォルダを削除する
private static void job3(File file) {
//判断该文件是否存在
if (file.exists()){
//得到文件数组
File[] files = file.listFiles();
//遍历所有子目录和文件
for(File f:files){
//判断文件是不是一个标准文件
if (f.isFile()){
//是的话删除该文件
f.delete();
}else {
//不是文件就递归到子文件夹里,进行删除文件
job3(f);
}
}
//删除文件夹
file.delete();
return;
}
System.out.println("文件路径错误");
}
演習10
文字ストリームを使用して、ファイル内のデータを変換し、bファイルに書き込みます。大文字から小文字に変換します。小文字から大文字に変換します。番号を削除します。
public static void changeFile(String filea,String fileb) throws Exception {
//缓冲字符输入流
BufferedReader br = new BufferedReader(new FileReader(filea));
//缓冲区字符输出流
BufferedWriter bw = new BufferedWriter(new FileWriter(fileb,true));
int c=-1;
while ((c=br.read())!= -1){
if(65<=c&&c<=90){
c+=32;
bw.write(c);
continue;
}else if(97<=c&& c<=122){
c-= 32;
bw.write(c);
continue;
}else if(48<=c && c<= 57){
continue;
}
bw.write(c);
}
br.close();
bw.close();
}
}
よく書かれていないことは、アドバイスをください!!