一、 实验目的和要求

实验目的和要求:要求学生能在学习和理解课堂学习内容中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:编程作业7

    这周的编程作业主要是两方面内容. 1.K-means聚类. 2.PCA(Principle Component Analys)主成分分析. 方式主要是通过对图像的聚类实现压缩图像,后来发现PCA也可以 ...

  2. Laravel5.1学习笔记18 数据库4 数据填充

    简介 编写数据填充类 使用模型工厂类 调用额外填充类 执行填充 #简介 Laravel includes a simple method of seeding your database with t ...

  3. Boost Bimap示例

    #include <string> #include <iostream> #include <boost/bimap.hpp> template< clas ...

  4. [ CQOI 2009 ] 中位数图

    \(\\\) \(Description\) 给出\(N\)的一个全排列,统计该排列有多少个长度为奇数的连续子序列,中位数是\(B\). \(N\in [0,10^5]\),\(B\in [0,N]\ ...

  5. Redux 基础概念

    Redux is a predictable state container for JavaScript apps.,亦即 Redux 希望能提供一个可以预测的 state 管理容器,让开发者可以可 ...

  6. spring 415

    不支持的媒体类型 spring mvc 使用@requestBody注解json请求时,jQuery有限制,否则会出现 415 错误 1.使用ajax  $.ajax({                ...

  7. 重绘DataGridView标头

    最近突然想在DataGridView标头放置一个CheckBox,我就想着重写下DataGridViewColumnHeaderCell抱着试试的心态结果真的是可以的下面是源码:(如果有看不懂的可以加 ...

  8. C# Task多线程

    来自Eleven老师示例 private void btnTask_Click(object sender, EventArgs e) { Console.WriteLine(); Console.W ...

  9. shell脚本网络流量实时查看

    Linux网络流量实时查看脚本,Centos默认没有自带流量查看工具,通过网上的资料做了一些修改 #!/bin/bash # Author: Ca0gu0 # Script Name: idev.sh ...

  10. Mysql 之主从复制,mysql-proxy读写分离

    准备两台mysql服务器,master(192.168.43.64).slave(192.168.84.129) master配置: log-bin=mysql-bin binlog_format=m ...