一、 实验目的和要求

实验目的和要求:要求学生能在学习和理解课堂学习内容中JAVA流编程理论的基础上,学习并逐步掌握JAVA流程序的编写和调试,学习依据处理需求对不同流的正确选择使用和组合用法。

实验内容:设计和编写一个程序从键盘读入一行字符串,将其写入一个文本文件里,再编写还有一个程序从文本文件里读入字符串并在命令行窗体显示出来。

二、实验代码

写入文件

package think;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField; public class java_exp_03iostream { public static void main(String[] args) { //字符缓冲流
BufferedReader br = null;
BufferedWriter bw = null;
try {
//br=newBufferedReader(newFileReader("d:\\buffered.txt"));
//从键盘读取字节流 转化成字符流 包装成缓冲字符流
br= new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new FileWriter("d:\\buffered.txt"));
for(String str; (str= br.readLine() )!= null ; )
{
if(str.equalsIgnoreCase("e")||str.equalsIgnoreCase("exit"))
{ System.out.println("退出");break;}
else
{
bw.write(str);
bw.newLine(); //行分隔符
}
} } catch (IOException e) {
e.printStackTrace();
// TODO: handle exception
}finally //关闭两个buffered对象
{
try {
if(br != null)
br.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
try {
if(bw != null)
bw.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} } } }<span style="font-weight: bold;"> </span>

控制台输入字符串,输入e退出,把字符串写入文件。

第二个程序读出文件内容。

<span style="font-size:12px;"><strong>p</strong>ackage think;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public class java_exp_03read {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("d:buffered.txt"));
for(String str; (str= br.readLine() )!= null ; )
{ System.out.println(str);
} } catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if(br != null)
br.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
} }
} }</span>

三、实验总结

IO流学习小结:

 
*FileInputStream

 *FileOutputStream 字节 文件输入输出流

 *FileReader

 *FileReader 字符 文件输入输出流

 *Buffered+* 缓冲流类 属于过滤流  包装 文件流   经常使用

 *InputStreamReader 

 *OutputStreamReader 转换流

 *DataInputStream 

 *DataOutputStream 数据流

 *PrintStream

 *PrintWriter 打印流

 *ObjectOutputStream

 *ObjectInputStream 对象流





总体的思路:





 *文件的输入输出有非常多种方法能够实现,差别在于效率,字符的编码不同,採用的方式可能也不同。





遇到的问题和解决办法:





 *问题: 最先採用的方法是FileInputStream,FileOutputStream。假设写入的是英文或者数字,没问题。假设是中文,则从文件输入的时候,有问题。输出到文件没问题。

百度+思考了一会儿,结果例如以下:unicode编码时,中文是两个字节编码的。用字节流的方式从文件读进来的时候,遇到中文的字符,把中文拆成两个字节读取,所以会乱码。

而字节流输出到文件的时候,会依据平台的默认编码方式把中文字符转换成了字节数组,一个字节一个字节的输出文件。windows记事本能够自己主动认出中文字符。所以,文本内容须要读取的时候,一般不用字节流。

* 优化:在用了字符流输入输出之后。又用了缓冲流。来提高效率。

先把读取或者写入到文件的内容,先保存在缓冲数组里,一次性写入或者输出,提高了效率。

在我写的程序能够非常好的体现出来:比方。我在从console写字符到文件的时候。输入 e  或者 exit结束。再没有输入e 和exit的时候,打开buffered的时候。会发现是没有内容的。

结束之后,才显示内容。

 * 心得:C。C++文件的输入输出都学过,可是因为平时非常少写小软件,所以没用到这个。

可是输入输出非常重要。



NJUPT JAVA语言 流处理程序设计的更多相关文章

  1. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  2. java语言实现对程序设计语言源文件统计字符数、单词数、行数及其他拓展功。

    本次作业Github项目地址:https://github.com/YiChenglong2018/WordCount 一.项目简介 本项目的需求可以概括为:对程序设计语言源文件统计字符数.单词数.行 ...

  3. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  4. Java语言程序设计(基础篇)第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  5. 《JAVA语言程序设计》上课笔记

    教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一.        问几个问题 1.             你们到这里来干什么 ...

  6. Java语言程序设计-助教篇

    1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...

  7. Java语言程序设计复习提纲

     这是我在准备Java考试时整理的提纲,如果是通过搜索引擎搜索到这篇博客的师弟师妹,建议还是先参照PPT和课本,这个大纲也不是很准确,自己总结会更有收获,多去理解含义,不要死记硬背,否则遇到概念辨析题 ...

  8. java语言程序设计(一)-1

    java 语言的特点是: 强类型,制定了比较多的语言规范,尽可能在编译阶段检测出更多的错误及警告. 编译和解释,首先将源代码编译成codebyte,运行时,java的运行系统装载和链接需要执行的类,并 ...

  9. 全国计算机等级考试二级笔试样卷Java语言程序设计

    一.选择题((1)-(35)每小题2分,共70分) 下列各题A).B).C).D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)下列选项中不符合良好程 ...

随机推荐

  1. Coursera公开课-Machine_learing:编程作业3

    第四周 编程作业: Multi-class Classification and Neural Networks 这周作业与上一周有许多相同的部分,比如longistic regression中的lr ...

  2. netty学习:UDP服务器与Spring整合

    最近接到一个关于写UDP服务器的任务,然后去netty官网下载了netty的jar包(netty-4.0.49.Final.tar.bz2),解压后,可以看到上面有不少example,找到其中的关于U ...

  3. vue项目杂记

    vue项目杂记 文件目录结构 src main.js app.vue package.json webpack_config_dev.js 需要安装的包 1. vue cnpm i vue --sav ...

  4. Java 开源博客 Solo 1.3.0 发布 - Docker 支持

    Solo 1.3.0 正式发布了,感谢一直以来关注 B3log 开源的朋友! 可以通过一个命令启动(不需要安装数据库.部署容器),也可以通过 war 方式部署容器,连接 MySQL.这应该是史上最容易 ...

  5. 【译】x86程序员手册16-5.3联合使用段与分页转换

    5.3 Combining Segment and Page Translation  联合使用段与分页转换 Figure 5-12 combines Figure 5-2 and Figure 5- ...

  6. HDU_1698_Just a Hook_线段树区间更新

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. registerDataSetObserver:浅析Andorid ListView和Adapte

    最近由于遇到将内容分部绑定到ListView里的需求,追踪源码之后对ListView和Adapter有了点肤浅的认识,在此与大家分享. 这里用到了观察者模式,在ListView的setAdapter里 ...

  8. unittest 是什么?怎么用?

    unittest单元测试框架详解 https://www.cnblogs.com/fighter007/p/8245063.html unittest最详细的解说 https://www.cnblog ...

  9. CAD类型转换

    AcDbEntity *pEnt; AcDbCircle *pcir = AcDbCircle::cast(pEnt); static_cast<AcDbCircle*>(pEnt); p ...

  10. mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme

    1,mysql5.6是密码为空直接进入数据库的,但是mysql5.7就需要初始密码 cat /var/log/mysqld.log | grep password 或者:grep 'temporary ...