在Java中,把这些不同类型的输入、输出抽象为流(Stream),而其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示,从而使程序设计简单明了。

首先我要声明下:所谓的输入输出都是相对内存而言的

还要讲几个基本概念:字节流和字符流,字节流8位,主要由InputStream和OutputStream来处理。字符流16位,主要由Reader和Writer来处理。

节点流和处理流,磁盘或网络等读写的数据的流为节点流,对节点流进行封装和处理的流叫处理流。

InputStream和Reader都是抽象类,我用他们对File的实现类做例子,eg(FileInputStream)

public class FileInputStreamTest

{

public static void main(String[] args) throws IOException

{

//创建字节输入流

FileInputStream fis = new FileInputStream("FileInputStreamTest.java");

//创建一个长度为1024的“竹筒”

byte[] bbuf = new byte[1024];

//用于保存实际读取的字节数

int hasRead = 0;

//使用循环来重复“取水”过程

while ((hasRead = fis.read(bbuf)) > 0 )

{

//取出“竹筒”中水滴(字节),将字节数组转换成字符串输入!

System.out.print(new String(bbuf , 0 , hasRead ));

}

fis.close();

}

}

eg(FileReader)

public class FileWriterTest

{

public static void main(String[] args) throws IOException

{

FileWriter fw = null;

try

{

//创建字符输出流

fw = new FileWriter("poem.txt");

fw.write("锦瑟 - 李商隐/r/n");

fw.write("锦瑟无端五十弦,一弦一柱思华年。/r/n");

fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。/r/n");

fw.write("沧海月明珠有泪,蓝田日暖玉生烟。/r/n");

fw.write("此情可待成追忆,只是当时已惘然。/r/n");

}

catch (IOException ioe)

{

ioe.printStackTrace();

}

finally

{

//使用finally块来关闭文件输出流

if (fw != null)

{

fw.close();

}

}

}

}

以上是输入,下面讲下输出

OutputStream和Writer也是抽象类,我用他们对File的实现类做例子,eg(OutputStream)

public class FileOutputStreamTest

{

public static void main(String[] args) throws IOException

{

FileInputStream fis = null;

FileOutputStream fos = null;

try

{

//创建字节输入流

fis = new FileInputStream("FileOutputStreamTest.java");

//创建字节输入流

fos = new FileOutputStream("newFile.txt");

byte[] bbuf = new byte[32];

int hasRead = 0;

//循环从输入流中取出数据

while ((hasRead = fis.read(bbuf)) > 0 )

{

//每读取一次,即写入文件输出流,读了多少,就写多少。

fos.write(bbuf , 0 , hasRead);

}

}

catch (IOException ioe)

{

ioe.printStackTrace();

}

finally

{

//使用finally块来关闭文件输入流

if (fis != null)

{

fis.close();

}

//使用finally块来关闭文件输出流

if (fos != null)

{

fos.close();

}

}

}

}

eg(Writer)

public class FileWriterTest

{

public static void main(String[] args) throws IOException

{

FileWriter fw = null;

try

{

//创建字符输出流

fw = new FileWriter("poem.txt");

fw.write("锦瑟 - 李商隐/r/n");

fw.write("锦瑟无端五十弦,一弦一柱思华年。/r/n");

fw.write("庄生晓梦迷蝴蝶,望帝春心托杜鹃。/r/n");

fw.write("沧海月明珠有泪,蓝田日暖玉生烟。/r/n");

fw.write("此情可待成追忆,只是当时已惘然。/r/n");

}

catch (IOException ioe)

{

ioe.printStackTrace();

}

finally

{

//使用finally块来关闭文件输出流

if (fw != null)

{

fw.close();

}

}

}

}

以上都是节点流的处理,但用起来比较麻烦,下面使用处理流来简化i/o操作

public class PrintStreamTest

{

public static void main(String[] args)throws IOException

{

PrintStream ps = null;

try

{

//创建一个节点输出流:FileOutputStream

FileOutputStream fos = new FileOutputStream("test.txt");

//以PrintStream来包装FileOutputStream输出流

ps = new PrintStream(fos);

//使用PrintStream执行输出

ps.println("普通字符串");

ps.println(new PrintStreamTest());

}

catch (IOException ioe)

{

ioe.printStackTrace(ps);

}

finally

{

ps.close();

}

}

}

转换流,主要用于从字节流到字符流,方便流的操作,然后利用BufferedReader来方便字符流的操作,eg

public class KeyinTest

{

public static void main(String[] args)

{

BufferedReader br = null;

try

{

//将Sytem.in对象转换成Reader对象

InputStreamReader reader = new InputStreamReader(System.in);

//将普通Reader包装成BufferedReader

br = new BufferedReader(reader);

String buffer = null;

//采用循环方式来一行一行的读取

while ((buffer = br.readLine()) != null)

{

//如果读取的字符串为"exit",程序退出

if (buffer.equals("exit"))

{

System.exit(1);

}

//打印读取的内容

System.out.println("输入内容为:" + buffer);

}

}

catch (IOException ioe)

{

ioe.printStackTrace();

}

//关闭输入流

finally

{

try

{

br.close();

}

catch (IOException ioe)

{

ioe.printStackTrace();

}

}

}

}

最后讲下File类的使用,eg

public class FilenameFilterTest

{

public static void main(String[] args)

{

File file = new File(".");

String[] nameList = file.list(new MyFilenameFilter());

for (String name : nameList)

{

System.out.println(name);

}

}

}

//实现自己的FilenameFilter实现类

class MyFilenameFilter implements FilenameFilter

{

public boolean accept(File dir, String name)

{

//如果文件名以.java结尾,或者文件对应一个路径,返回true

return name.endsWith(".java")

|| new File(name).isDirectory();

}

}

注意我加了后缀的过滤,讲了File不得不补充RandomAccessFile,任意文件访问类,拥有reader和writer的功能,但要注意

他对文件的插入只是一种覆盖,eg

public class InsertContent

{

public static void insert(String fileName , long pos ,

String insertContent)throws IOException

{

RandomAccessFile raf = null;

//创建一个临时文件来保存插入点后的数据

File tmp = File.createTempFile("tmp" , null);

FileOutputStream tmpOut = null;

FileInputStream tmpIn = null;

tmp.deleteOnExit();

try

{

raf = new RandomAccessFile(fileName , "rw");

tmpOut = new FileOutputStream(tmp);

tmpIn = new FileInputStream(tmp);

raf.seek(pos);

//--------下面代码将插入点后的内容读入临时文件中保存---------

byte[] bbuf = new byte[64];

//用于保存实际读取的字节数

int hasRead = 0;

//使用循环方式读取插入点后的数据

while ((hasRead = raf.read(bbuf)) > 0 )

{

//将读取的数据写入临时文件

tmpOut.write(bbuf , 0 , hasRead);

}

//----------下面代码插入内容----------

//把文件记录指针重新定位到pos位置

raf.seek(pos);

//追加需要插入的内容

raf.write(insertContent.getBytes());

//追加临时文件中的内容

while ((hasRead = tmpIn.read(bbuf)) > 0 )

{

raf.write(bbuf , 0 , hasRead);

}

}

finally

{

raf.close();

}

}

public static void main(String[] args) throws IOException

{

insert("InsertContent.java" , 45 , "插入的内容/r/n");

}

}

java疯狂讲义输入输出视频_疯狂JAVA讲义---第十五章:输入输出(上)流的处理和文件...相关推荐

  1. Linux(b站视频兄弟连)自学笔记第十五章——启动管理

    Linux(b站视频兄弟连)自学笔记第十五章--启动管理 CentOS 6.x启动管理 系统运行级别 系统启动过程 启动引导程序grub Grub配置文件 Grub加密与字符界面分辨率调整 系统修复模 ...

  2. 疯狂软件mysql视频_疯狂软件MySql视频

    疯狂软件MySql视频 教程内容: 1_疯狂软件_疯狂JAVA_肖文吉老师_MYSQL数据库_数据库概念 2_疯狂软件_疯狂Java_肖文吉老师_MYSQL数据库_MYSQL的安装 3_疯狂软件_疯狂 ...

  3. java 截取优酷视频_通过JAVA获取优酷视频

    通过JAVA获取优酷视频,现在很多社会网站都有这个功能,用户输入优酷视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. 比如:新浪微博就有这个功能,当用户输入视频网址后,就 ...

  4. java好的学习视频_自学Java看谁的视频比较好

    随着互联网的发展,视频教程充斥着网络,很多人为了能够在视频教程中捞取一桶金,纷纷投入视频售卖的大军之中,其中不乏有一些劣质的视频课件让学员受害,今天我们就来看看在Java编程专业中,有什么好的Java ...

  5. java蜘蛛纸牌教学视频_南通java学习班费用

    一阶段 开发入门 通识知识:计算机的规范应用.office办公自动化.邮件文化.记笔记的方法,提问的艺术.计算机英语.思维导图.Markdown笔记.沟通技巧 软件常识:Web应用概述.DOS常用命令 ...

  6. Java面向对象程序设计(第二版)袁绍欣 第十五章课后习题答案

    5.利用URLConnetction对象编写程序返回某网站的首页,并将首页的内容存放到文件当中. import java.io.*; import java.net.*;public class ht ...

  7. 第十五章 输入输出系统

    本章主要参考和摘自疯狂java讲义上面的(java编程思想的后面看过后有新的内容再补充进去吧). 输入输出是所有程序都必需的部分----使用输入机制允许程序读取外部数据(包括磁盘.光盘等存储设备上的数 ...

  8. 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...

  9. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

最新文章

  1. 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
  2. 服务器市场严酷竞争下的众生相
  3. ThinkPad R400在Windows7下的几个问题
  4. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第8章-有输入时滞的二阶多智能体系统的多一致
  5. 死锁产生的4个必要条件,如何检测,解除死锁
  6. 如何让 Drupal 使用 Wordpress 形式的编辑代码?
  7. 大数据时代,一名优秀的开发者应具备怎样的特质?
  8. 备份mysql数据库的思路
  9. JSP -- JSP语法
  10. MATLAB imshow之后在四周加上边框
  11. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
  12. mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
  13. vb调用摄像头实现拍照源码_牛逼!终于搞了一个高大上的人脸识别登录玩玩(附源码),出乎意料的简单......
  14. FreeSwitch Originate API
  15. 一阶微分方程的初等解法
  16. 微信小程序之在线任务发布与接单平台
  17. 【总结】NPU/CPU/GPU 傻傻分不清?
  18. [洛谷P4492] [HAOI2018]苹果树
  19. java代码实现打气球游戏_javascript+css3开发打气球小游戏完整代码
  20. CSDN 下载 版块问题解决日志

热门文章

  1. linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法
  2. CoreIDRAW出现“尝试重新启动计算机和应用程序...”问题解决方案
  3. 用计算机处理图像属于啥技术,计算机图像处理技术在网页设计中的应用
  4. python字体加粗代码_如何在python docx中加粗行单元格的文本?
  5. 赠书 | 第一次送书,送排名第一的书!
  6. sniffer-agent
  7. appuim框架二次封装-UI自动化-自整理亲自实践
  8. 【html标签复习】
  9. 使用awk处理多行fasta文件拆分为单个fasta文件,并去掉后缀^M
  10. 功率放大器电路图集(多种类功率放大电路)