欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java自学-I/O 字符流

程序员文章站 2022-04-15 14:48:56
Java的字符流 Reader Writer Reader字符输入流 Writer字符输出流 专门用于字符的形式读取和写入数据 步骤 1 : 使用字符流读取文件 FileReader 是Reader子类,以FileReader 为例进行文件读取 package stream; import java ......

java的字符流 reader writer

reader字符输入流
writer字符输出流
专门用于字符的形式读取和写入数据

步骤 1 : 使用字符流读取文件

filereader 是reader子类,以filereader 为例进行文件读取

package stream;
 
import java.io.file;
import java.io.filereader;
import java.io.ioexception;
 
public class teststream {
 
    public static void main(string[] args) {
        // 准备文件lol.txt其中的内容是ab
        file f = new file("d:/lol.txt");
        // 创建基于文件的reader
        try (filereader fr = new filereader(f)) {
            // 创建字符数组,其长度就是文件的长度
            char[] all = new char[(int) f.length()];
            // 以字符流的形式读取文件所有内容
            fr.read(all);
            for (char b : all) {
                // 打印出来是a b
                system.out.println(b);
            }
        } catch (ioexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
        }
 
    }
}

步骤 2 : 使用字符流把字符串写入到文件

filewriter 是writer的子类,以filewriter 为例把字符串写入到文件
Java自学-I/O 字符流

package stream;
  
import java.io.file;
import java.io.filewriter;
import java.io.ioexception;
  
public class teststream {
  
    public static void main(string[] args) {
        // 准备文件lol2.txt
        file f = new file("d:/lol2.txt");
        // 创建基于文件的writer
        try (filewriter fr = new filewriter(f)) {
            // 以字符流的形式把数据写入到文件中
            string data="abcdefg1234567890";
            char[] cs = data.tochararray();
            fr.write(cs);
  
        } catch (ioexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
        }
  
    }
}

练习

准备一个文本文件(非二进制),其中包含ascii码的字符和中文字符。
设计一个方法

public static void encodefile(file encodingfile, file encodedfile);

在这个方法中把encodingfile的内容进行加密,然后保存到encodedfile文件中。
加密算法:
数字:
如果不是9的数字,在原来的基础上加1,比如5变成6, 3变成4
如果是9的数字,变成0
字母字符:
如果是非z字符,向右移动一个,比如d变成e, g变成h
如果是z,z->a, z-a。
字符需要保留大小写
非字母字符:
比如',&^ 保留不变,中文也保留不变

答案:

package stream;
 
import java.io.file;
import java.io.filereader;
import java.io.filewriter;
import java.io.ioexception;
 
public class teststream {
    /**
     *
     * @param encodingfile
     *            被加密的文件
     * @param encodedfile
     *            加密后保存的位置
     */
    public static void encodefile(file encodingfile, file encodedfile) {
 
        try (filereader fr = new filereader(encodingfile); filewriter fw = new filewriter(encodedfile)) {
            // 读取源文件
            char[] filecontent = new char[(int) encodingfile.length()];
            fr.read(filecontent);
            system.out.println("加密前的内容:");
            system.out.println(new string(filecontent));
 
            // 进行加密
            encode(filecontent);
            // 把加密后的内容保存到目标文件
            system.out.println("加密后的内容:");
            system.out.println(new string(filecontent));
 
            fw.write(filecontent);
        } catch (ioexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
        }
    }
 
    private static void encode(char[] filecontent) {
        for (int i = 0; i < filecontent.length; i++) {
            char c = filecontent[i];
            if (isletterordigit(c)) {
                switch (c) {
                case '9':
                    c = '0';
                    break;
                case 'z':
                    c = 'a';
                    break;
                case 'z':
                    c = 'a';
                    break;
                default:
                    c++;
                    break;
                }
            }
            filecontent[i] = c;
        }
    }
 
    public static boolean isletterordigit(char c) {
        // 不使用character类的isletterordigit方法是因为,中文也会被判断为字母
        string letterordigital = "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
        return -1 == letterordigital.indexof(c) ? false : true;
    }
 
    public static void main(string[] args) {
        file encodingfile = new file("e:/project/j2se/src/test1.txt");
        file encodedfile = new file("e:/project/j2se/src/test2.txt");
        encodefile(encodingfile, encodedfile);
    }
}