Java输入/输出流体系详解
程序员文章站
2023-12-19 17:25:04
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘
java输入/输出流体系
1.字节流和字符...
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘
java输入/输出流体系
1.字节流和字符流
字节流:按字节读取。字符流:按字符读取。
字符流读取方便,字节流功能强大,当不能用字符流时,可以用字节流。
字节流基类:inputstream、outputstream
inputstream方法:
outputstream方法:
字符流基类:reader、writer
reader方法:
writer方法:
2.输入输出流体系
3.转换流
inputstreamreader:字节输入流->字符输入流的转换
outputstreamwriter:字节输出流->字符输出流的转换
例如:字节输入流->字符输入流的转换
字节流使用不方便,而普通的reader读取也不太方便,转换成bufferreader,利用bufferreader的readline(),一次读取一行。
bufferedreader reader = new bufferedreader(new inputstreamreader(inputstream)); string result = ""; string line = ""; while((line = reader.readline())!= null){ result = result+ line; } system.out.println(result);
inputstream to string:
private static string changeinputestream(inputstream inputstream,string encode) { //通常叫做内存流,写在内存中的 bytearrayoutputstream outputstream = new bytearrayoutputstream(); byte[] data = new byte[1024]; int len = 0; string result = ""; if(inputstream != null){ try { while((len = inputstream.read(data))!=-1){ outputstream.write(data, 0, len); } //result是在服务器端设置的dopost函数中的 result = new string(outputstream.tobytearray(),encode); outputstream.flush(); outputstream.close(); inputstream.close(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } return result; }
inputstream->stringbuffer:
stringbuffer buffer = new stringbuffer(); inputstreamreader reader =new inputstreamreader(request.getinputstream(),"utf-8"); char[] requestchar = new char[5]; if(reader != null){ system.out.println("默认编码:"+reader.getencoding());//默认编码:utf8 } //buffer reader.readline() while((temp = reader.read(requestchar))!=-1){ buffer.append(requestchar, 0, temp); system.out.println(buffer.tostring()); } string result = buffer.tostring();
4.文件读写:
class kaoshi {public static void main(string[] args){ scanner in=new scanner(system.in); int score=0; //分数; stringbuffer answer=new stringbuffer();//存放用户答案,动态字符串; string result="acdd"; //正确答案; try{ filereader file=new filereader("test.txt"); //打开文件; bufferedreader intw=new bufferedreader(file); //缓冲流,按行读; string s=null; while((s=intw.readline())!=null){ //判断不为空; if(!s.startswith("*")){ system.out.println(s); } else{ system.out.println("请输入正确答案:"); string str=in.next(); char c= str.charat(0);//收集答案; answer.append(c); } } }catch(ioexception e){ e.printstacktrace(); } for(int i=0;i<result.length();i++){ if(result.charat(i)==answer.charat(i)|| result.charat(i)==answer.charat(i)-32){ score+=25; } } system.out.println(score); } }
总结
以上就是本文关于java输入/输出流体系详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:java基础强化训练输入错误即结束进程、java控制台输入数组并逆序输出的方法实例、java输出链表倒数第k个节点等,如有不足之处,欢迎留言指出,期待您的宝贵意见。