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 为例把字符串写入到文件
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); } }
下一篇: Oracle数据库---包