黑马程序员——Java I/O基础知识之I/O流

I/O流基础知识——字节流和字符流

文件存储在硬盘中,是以二进制表示的,只有内存中才能形成字符。数据的来源可以有硬盘,内存,控制台,网络,Java把数据从一个地方转到另一个地方的现象称为流,用InputStream和OutputStream接口来表示,这两个流里面的都是以字节为单位的,后来加入了Reader和Writer,里面操作的是字符,是两个字节为单位的。

字节流

字节流将数据写入文件

try {

File file =new File("d:" +File .separator+"my.txt") ;

OutputStream
ops =new FileOutputStream(file );

byte[] buff ="白日依山尽\r\n" .getBytes (); //加上\r\n可换行

//一个字节一个字节地写

for(byte buf: buff){

ops .write (buf) ;

}

//只要程序还没有关闭,就可以继续写。

//一次写入一个字节数组。

ops .write (buff) ;

ops .close ();

//文件中的结果

/*                白日依山尽

白日依山尽

*/

字节流往文件中追加内容

try {

File file = new File ("d:" +File . separator+ "my.txt") ;

//只需要在这里添加上参数true就行了,前提是文件中有内容

OutputStream
ops =new FileOutputStream( file, true);

byte[] buff ="黄河入海流\r\n" .getBytes (); //加上\r\n可换行

//文件中的结果

/*                白日依山尽

黄河入海流*/

字节流读取文件内容

try {

File
file =new File("d:" +File .separator+"my.txt") ;

byte[] buff =new byte[ 1024];

InputStream
ips =new FileInputStream(file );

int len;

//file.length()获取文件大小

System .out.println( "文件大小:" +file .length ());

while((len =ips .read (buff)) !=-1 ){

System .out.println( new String( buff, 0, len));

/*                文件大小:24

白日依山尽

黄河入海流*/

字符流写入和写出

字符流的写入和写出与字节流基本一致,只用来处理纯文本的文件,单位是char字符;

try {

File
file =new File("d:" +File .separator+"mychar.txt") ;

if(!file.exists()) file. createNewFile();

Writer
ww =new FileWriter(file ,true);

ww .write ("\n我还是字符流"); //字符流不需要转成byte。

ww .close ();

char [] chars= new char [200] ;

Reader rr=new FileReader (file) ;

int len;

while((len =rr .read (chars)) !=-1 )System.out.println( new String(chars,0,len)) ;

/*                         我是字符流

我还是字符流

我还是字符流*/

复制文件

通过IO将文件从源写到目标去,这时可能需要使用到其他的装饰流,扩展功能,使流可以在多种源和目的之间转移。

 

class CopyDemo{

public static void copydir (File dir,File
dest){

//文件夹部分

if(!dir.exists()) System. out. println("别逗" );

if(dir .isDirectory ()){

if(!dest.exists()) dest. mkdir();

for(String files :dir .list ())

{//将目录下的每一个文件名罗列出来,通过递归筛选文件夹或者文件执行相关代码

File
dirfile=new File (dir,files) ;

File
destfile=new File (dest,files) ;

copydir( dirfile, destfile);

}

}

//文件部分

else{

byte[] buff =new byte[ 1024];

int len;

try {

//文件复制就是把数据从硬盘的一个地方写到另一个地方

InputStream
ips =new FileInputStream(dir );

OutputStream
ops =new FileOutputStream(dest );

while((len =ips .read (buff)) !=-1 )ops.write( buff, 0, len);

ips .close ();

ops .close ();

catch (Exception e ) {

// TODO: handle exception

e .printStackTrace ();

}

}

}

}

public class CopyTest {

public static void main (String[] args) {

// TODO Auto-generated method stub

CopyDemo cd=new CopyDemo();

File dir=new File(arg[0]);

File dest= new File(arg[1]);

try {

cd.copydir(dir, dest);

catch (Exception e ) {

// TODO: handle exception

e .printStackTrace ();

}

}

}

字节流和字符流相互转换。InputStreamReader和OutputStreamWriter分别将字节输入流转换成字符流和将字节输出流转换成字符流。

try {

//字符转换流可以将原本是字节流输出,转成字符流输出

File
file = new File ("d:" +File . separator+ "singer.txt") ;

if (! file. exists()) file. createNewFile ();

Writer
ww = new OutputStreamWriter (new FileOutputStream (file ));

ww .write ( "我是歌手" );

ww .close ();

//同理也可以将字节输入流转换成字符流

//最常用的是把从控制台获得的字节流转换转换成字符流以便操作

Reader
rr = new InputStreamReader (System . in) ;

char [] chs= new char [ 100] ;

int len;

while ((len =rr .read ( chs)) !=-1 )

System . out. println( new String( chs, 0, len ));

黑马程序员——Java I/O基础知识之I/O流,布布扣,bubuko.com

时间: 2024-10-01 05:26:00

黑马程序员——Java I/O基础知识之I/O流的相关文章

黑马程序员-----Java概述及基础语法

------Java培训.Android培训.期待与您交流! ------- 第一章 java概述及基础语法 一.java概述 1.Java是什么? Java是一门面向对象.面向网络的跨平台高级计算机编程语言,它由SUN(StanfordUniversity Network)公司于1995年推出了.作为目前最热门的编程语言,Java紧跟时代步伐持续推出它的新版本和新的技术实现,以适应计算机技术的快速发展和越来越多样化的市场需求,目前Java版本更新至Java8,Java同时推出三个技术体系以满足

黑马程序员 —入学笔记《基础知识1》

-------   android培训 java培训.期待与您交流! ---------- JAVA程序通过JDK开发完成,然后交给JRE运行.java的运行机制是先编译,后解释运行.它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码.从而实现了"一次编译.到处执行"的跨平台特性. 下载JDK后,首先要配置环境变量,以便java源码的编译运行,其中java指令集存放路径在PATH下,class文件路径在CLASSPATH. 一.JAVA

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必

黑马程序员——Java基础知识之多线程协同

多线程协同 线程间的通讯:对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤,但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必须用在

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——Java I/O流基础知识点(File类)

File工具 File类就是用俩将文件或者文件夹封装对象,弥补流对象的不足--流只能操作数据,不能操作文件夹的 封装的是路径!!! 构造方法演示 1.可以将已有的未出现的文件或者文件夹封装成对象. File f1=new File("c:\\abc\\a.txt"): File f2=new File("d:\\abc","ab.txt"打印,会打印路径.:目录分隔符,为了更好地跨平台File. File类常见功能 1,创建 createNewF