java疯狂讲义输入输出视频_疯狂JAVA讲义---第十五章:输入输出(上)流的处理和文件...
在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讲义---第十五章:输入输出(上)流的处理和文件...相关推荐
- Linux(b站视频兄弟连)自学笔记第十五章——启动管理
Linux(b站视频兄弟连)自学笔记第十五章--启动管理 CentOS 6.x启动管理 系统运行级别 系统启动过程 启动引导程序grub Grub配置文件 Grub加密与字符界面分辨率调整 系统修复模 ...
- 疯狂软件mysql视频_疯狂软件MySql视频
疯狂软件MySql视频 教程内容: 1_疯狂软件_疯狂JAVA_肖文吉老师_MYSQL数据库_数据库概念 2_疯狂软件_疯狂Java_肖文吉老师_MYSQL数据库_MYSQL的安装 3_疯狂软件_疯狂 ...
- java 截取优酷视频_通过JAVA获取优酷视频
通过JAVA获取优酷视频,现在很多社会网站都有这个功能,用户输入优酷视频地址后,能找到对应的视频及视频的缩略图,有些社区网站还能获取到视频的时长. 比如:新浪微博就有这个功能,当用户输入视频网址后,就 ...
- java好的学习视频_自学Java看谁的视频比较好
随着互联网的发展,视频教程充斥着网络,很多人为了能够在视频教程中捞取一桶金,纷纷投入视频售卖的大军之中,其中不乏有一些劣质的视频课件让学员受害,今天我们就来看看在Java编程专业中,有什么好的Java ...
- java蜘蛛纸牌教学视频_南通java学习班费用
一阶段 开发入门 通识知识:计算机的规范应用.office办公自动化.邮件文化.记笔记的方法,提问的艺术.计算机英语.思维导图.Markdown笔记.沟通技巧 软件常识:Web应用概述.DOS常用命令 ...
- Java面向对象程序设计(第二版)袁绍欣 第十五章课后习题答案
5.利用URLConnetction对象编写程序返回某网站的首页,并将首页的内容存放到文件当中. import java.io.*; import java.net.*;public class ht ...
- 第十五章 输入输出系统
本章主要参考和摘自疯狂java讲义上面的(java编程思想的后面看过后有新的内容再补充进去吧). 输入输出是所有程序都必需的部分----使用输入机制允许程序读取外部数据(包括磁盘.光盘等存储设备上的数 ...
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
最新文章
- 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
- 服务器市场严酷竞争下的众生相
- ThinkPad R400在Windows7下的几个问题
- 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第8章-有输入时滞的二阶多智能体系统的多一致
- 死锁产生的4个必要条件,如何检测,解除死锁
- 如何让 Drupal 使用 Wordpress 形式的编辑代码?
- 大数据时代,一名优秀的开发者应具备怎样的特质?
- 备份mysql数据库的思路
- JSP -- JSP语法
- MATLAB imshow之后在四周加上边框
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.11
- mysql (mariadb)数据库使用 mysqldump 备份全部数据库,并自动按当前时间名保存文件
- vb调用摄像头实现拍照源码_牛逼!终于搞了一个高大上的人脸识别登录玩玩(附源码),出乎意料的简单......
- FreeSwitch Originate API
- 一阶微分方程的初等解法
- 微信小程序之在线任务发布与接单平台
- 【总结】NPU/CPU/GPU 傻傻分不清?
- [洛谷P4492] [HAOI2018]苹果树
- java代码实现打气球游戏_javascript+css3开发打气球小游戏完整代码
- CSDN 下载 版块问题解决日志
热门文章
- linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法
- CoreIDRAW出现“尝试重新启动计算机和应用程序...”问题解决方案
- 用计算机处理图像属于啥技术,计算机图像处理技术在网页设计中的应用
- python字体加粗代码_如何在python docx中加粗行单元格的文本?
- 赠书 | 第一次送书,送排名第一的书!
- sniffer-agent
- appuim框架二次封装-UI自动化-自整理亲自实践
- 【html标签复习】
- 使用awk处理多行fasta文件拆分为单个fasta文件,并去掉后缀^M
- 功率放大器电路图集(多种类功率放大电路)