リソースを操作するJavaの入出力ストリームは、同じカバレッジトリガ紛争解決を達成するために

まず、問題のシーン

タイトル:小文字に大文字でs.txtターン、大文字小文字のターン、前に入力ファイルのカバーに、アンダースコアにスペースを回します

以前の質問は、質問は、同じ操作上の問題のファイルに、ファイルの背面カバーに出力ストリームの入力を生じません

第二に、白の操作

//口述一下,
//头就创建一个文件输入流对象,紧接着创建一个文件输出流对象,问题就在这里,后面是调用各流的读写方法
//调试:发现read()方法首次读取就是返回-1,说明遇到了文件末尾,也说明此时文件时空的
//运行结果:文件被置空了,原来的内容没了,也没有写入内容进去
public void wordCase(String path){
        try(//------①
        FileReader fr = new FileReader(path);//------②
        FileWriter fw = new FileWriter(path))//------③
        {
            System.out.println(new File(path).length());
            //记录读取到的字符
            StringBuilder sb = new StringBuilder();
            int hasRead = 0;
            while((hasRead = fr.read()) != -1){
                char c = (char)hasRead;
                //转空格
                if(c == ' '){
                    sb.append("_");
                }
                System.out.println(c);
                //判断是否是小写
                if(Character.isLowerCase(c)){
                    //转换成大写并加入字符串
                    sb.append(Character.toUpperCase(c));
                }else{
                    //转换成小写并加入字符串
                    sb.append(Character.toLowerCase(c));
                }
            }
            //将新字符串内容写入文件
                fw.write(sb.toString());
        }catch(IOException e){
            e.printStackTrace();
        }
    }

第三に、その理由を分析します

総括するに、いくつかの情報を検索します。

競合をトリガー、ファイルパスで動作するように、出力ストリームを開くために閉じられていない場合、資源の流れを入力します。ステッピング:から実行ルックマークコード、上記の① - >② - >①-- >③ - >① - >以下...と私が運転した後、③のステップで見つかった、ローカルバージョンを表示している②③実行が完了したときに、ファイルの内容は左の空白です。

その後に実行③、出力ストリームは、アクセスまたはアクセスが制限され、その後、直接何があってはならない、いないはFileNotFoundExceptionをスロー、より少ないリソースを取得します。したがって、私はあなたが②に実行すると、入力ストリームは、リソースファイルを取得するために、推測します空白の文書、取得した入力ストリームのファイルリソースが再度ファイルの内容を読み取るように、交換された元のファイルのファイルを生成するコンテンツファイルが最終的にゼロに空の書き込み、され、その結果、空であります

第四に、誤り訂正

正直な仕事は、内容を読み終え、その後、次のことを書くために:

//测试方法:略...
public void wordCase(String path){
    StringBuilder sb = null;
    /*读取文件内容,并保存成字符串*/
    try(
        FileReader fr = new FileReader(path))
    {
        System.out.println(new File(path).length());
        //记录读取到的字符
        sb = new StringBuilder();
        int hasRead = 0;
        while((hasRead = fr.read()) != -1){
            char c = (char)hasRead;
            //转空格
            if(c == ' '){
                sb.append("_");
            }
            System.out.println(c);
            //判断是否是小写
            if(Character.isLowerCase(c)){
                //转换成大写并加入字符串
                sb.append(Character.toUpperCase(c));
            }else{
                //转换成小写并加入字符串
                sb.append(Character.toLowerCase(c));
            }
        }
    }catch(IOException e){
        e.printStackTrace();
    }
    /*将新字符串内容写入文件*/
    try(
        FileWriter fw = new FileWriter(path))
    {
        fw.write(sb.toString());
    }catch(IOException e){
        e.printStackTrace();
    }
}

第五に、そして最終的に

私と一緒に古いドライバ帯、白を学び、意見を表明することで先人を理解する〜

おすすめ

転載: www.cnblogs.com/csyh/p/12527470.html