如何学习java的io/输入输出? 对于io这方面也学了几遍,但总是学不到手,运用不起来!请问该如何学习这方面的知识才能较好掌握? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关键是对流这个概念的理解,推荐文章:1.什么是数据流 ?数据流是指所有的数据通信通道有两类流,InputStream and OutputStream,Java中每一种流的基本功能依赖于它们InputStream 用于read,OutputStream 用于write, 读和写都是相对与内存说的,读就是从其他地方把数据拿进内存,写就是把数据从内存推出去这两个都是抽象类,不能直接使用2.InputStream 的方法有:read() 从流中读入数据 有3中方式:int read() 一次读一个字节int read(byte[]) 读多个字节到数组中int read(byte[],int off,int len) 指定从数组的哪里开始,读多长skip() 跳过流中若干字节available() 返回流中可用字节数,但基于网络时无效,返回0Supported() 判断是否支持标记与复位操作() 在流中标记一个位置,要与Supported()连用reset() 返回标记过的位置close() 关闭流3.OutputStream 的方法:write(int) 写一个字节到流中write(byte[]) 将数组中的内容写到流中write(byte[],int off,int len) 将数组中从off指定的位置开始len长度的数据写到流中close() 关闭流flush() 将缓冲区中的数据强制输出4.File 类File 可以表示文件也可以表示目录,File 类控制所有硬盘操作构造器:File(File parent,String child) 用父类和文件名构造File(String pathname) 用绝对路径构造File(String parent,String child) 用父目录和文件名构造File(URI uri) 用远程文件构造常用方法:boolean createNewFile();boolean exists();例子://建立 test.txt 文件对象,判断是否存在,不存在就创建import java.io.*;public class CreateNewFile{public static void main(String args[]){File f=new File("test.txt");try{if(!f.exists())f.createNewFile();elseSystem.out.println("exists");}catch(Exception e){e.printStackTrace();}}}boolean mkdir()/mkdirs()boolean renameTo(File destination)例子://看一下这 mkdir()/mkdirs() 的区别和 renameTo 的用法import java.io.*;public class CreateDir{public static void main(String args[]){File f=new File("test.txt");File f1=new File("Dir");File f2=new File("Top/Bottom");File f3=new File("newTest.txt");try{f.renameTo(f3);f1.mkdir();f2.mkdirs();}catch(Exception e){e.printStackTrace();}}}String getPath()/getAbsolutePath()String getParent()/getName()例子://硬盘上并没有parent 目录和 test.txt 文件,但我们仍然可以操作,因为我们创建了他们的对象,是对对象进行操作import java.io.*;public class Test{public static void main(String args[]){File f=new File("parent/test.txt");File f1=new File("newTest.txt");try{System.out.println(f.getParent());System.out.println(f.getName());System.out.println(f1.getPath());System.out.println(f1.getAbsolutePath());}catch(Exception e){e.printStackTrace();}}}String list[] //显示目录下所有文件long lastModified() //返回 1970.1.1 到最后修改时间的秒数boolean isDirectory()例子://列出目录下的所有文件和目录,最后修改时间,是目录的后面标出 ,是文件的后面标出文件长度import java.io.*;import java.util.*;public class Dir{public static void main(String args[]){File f=new File("Dir");String[] listAll=null;File temp=null;try{listAll=f.list();for(int i=0;itemp=new File(listAll);System.out.print(listAll+"\t");if(temp.isDirectory())System.out.print("\t \t");elseSystem.out.print(temp.length()+"\t");System.out.println(new Date(temp.lastModified()));}}catch(Exception e){e.printStackTrace();}}} 5.文件流的建立File f=new File("temp.txt");FileInputStream in=new FileInputStream(f);FileOutputStream out=new FileOutputStream(f);例子:文件拷贝import java.io.*;public class Copy{public static void main(String args[]){FileInputStream fis=null;FileOutputStream fos=null;try{fis=new FileInputStream("c2.gif");fos=new FileOutputStream("c2_copy.gif");int c;while((c=fis.read()) != -1)fos.write(c);}catch(Exception e){e.printStackTrace();}finally{if(fis != null) try{ fis.close(); }catch(Exception e){ e.printStackTrace(); }if(fos!= null) try{ fos.close(); }catch(Exception e){ e.printStackTrace(); }}}}6.缓冲区流BufferedInputStreamBufferedOutputStream他们是在普通文件流上加了缓冲的功能,所以构造他们时要先构造普通流例子:文件拷贝的缓冲改进import java.io.*;public class Copy{public static void main(String args[]){BufferedInputStream bis=null;BufferedOutputStream bos=null;byte buf[]=new byte[100];try{bis=new BufferedInputStream(new FileInputStream("persia.mp3"));bos=new BufferedOutputStream(new FileOutputStream("persia_copy.mp3"));int len=0;while( true ){len=bis.read(buf);if(len<=0) break;bos.write(buf,0,len);}bos.flush();//缓冲区只有满时才会将数据输出到输出流,用flush()将未满的缓冲区中数据强制输出}catch(Exception e){e.printStackTrace();}finally{if(bis != null) try{ bis.close(); }catch(Exception e){ e.printStackTrace(); }if(bos!= null) try{ bos.close(); }catch(Exception e){ e.printStackTrace(); }}}}7.原始型数据流DataInputStreamDataOutputStream他们是在普通流上加了读写原始型数据的功能,所以构造他们时要先构造普通流方法:readBoolean()/writeBoolean()readByte()/writeByte()readChar()/writeByte()......例子://这个流比较简单,要注意的就是读时的顺序要和写时的一样import java.io.*;public class DataOut{public static void main(String args[]){DataOutputStream dos=null;try{dos=new DataOutputStream(new FileOutputStream("dataout.txt"));dos.writeInt(1);dos.writeBoolean(true);dos.writeLong(100L);dos.writeChar('a');}catch(Exception e){e.printStackTrace();}finally{if(dos!=null)try{dos.close();}catch(Exception e){}}}}import java.io.*;public class DataIn{public static void main(String args[]){DataInputStream dis=null;try{dis=new DataInputStream(new FileInputStream("dataout.txt"));System.out.println(dis.readInt());System.out.println(dis.readBoolean());System.out.println(dis.readLong());System.out.println(dis.readChar());}catch(Exception e){e.printStackTrace();}finally{if(dis!=null)try{dis.close();}catch(Exception e){}}}} 楼上的楼上你写了这么多,但只写了字节流的处理,还有字符流(Reader和Writer)的处理没有写啊!再搬点过来. 谢谢一楼的“suyuanjie(师太,你就饶了老衲吧!) ”很详细的资料,也谢谢大家!不过我还是感觉有点迷糊,还得多多练习,才能掌握!如果把计算机组成原理弄懂的话,输入输出流是不是就很容易明白了?在实际工作中,输入输出流一般怎么应用呢? 字符串数组问题,在线等,急!!!! JInternalFrame不显示 请各位大侠帮帮忙,小弟感激不尽. java基础(关于子类和父类) 在JLIST里面拖动,要求只能让同一种格式的文件进行拖动 [急]求几本JMF的参考书 我错在那里了? 小问题!!===Ing! 一个菜鸟问题:帮我看看这个关于“关闭窗口按钮”的问题吧!谢谢! JBuilder输入的时候为什么光标总是有问题,往前跑 我是一个JAVA初学者,帮帮我! 这个怎么打印 Eclipse中运行java文件问题 !
1.什么是数据流 ?
数据流是指所有的数据通信通道
有两类流,InputStream and OutputStream,Java中每一种流的基本功能依赖于它们
InputStream 用于read,OutputStream 用于write, 读和写都是相对与内存说的,读就是从其他地方把数据拿进内存,写就是把数据从内存推出去
这两个都是抽象类,不能直接使用
2.InputStream 的方法有:
read() 从流中读入数据 有3中方式:
int read() 一次读一个字节
int read(byte[]) 读多个字节到数组中
int read(byte[],int off,int len) 指定从数组的哪里开始,读多长
skip() 跳过流中若干字节
available() 返回流中可用字节数,但基于网络时无效,返回0
Supported() 判断是否支持标记与复位操作
() 在流中标记一个位置,要与Supported()连用
reset() 返回标记过的位置
close() 关闭流
3.OutputStream 的方法:
write(int) 写一个字节到流中
write(byte[]) 将数组中的内容写到流中
write(byte[],int off,int len) 将数组中从off指定的位置开始len长度的数据写到流中
close() 关闭流
flush() 将缓冲区中的数据强制输出
4.File 类
File 可以表示文件也可以表示目录,File 类控制所有硬盘操作
构造器:
File(File parent,String child) 用父类和文件名构造
File(String pathname) 用绝对路径构造
File(String parent,String child) 用父目录和文件名构造
File(URI uri) 用远程文件构造
常用方法:
boolean createNewFile();
boolean exists();
例子:
//建立 test.txt 文件对象,判断是否存在,不存在就创建
import java.io.*;
public class CreateNewFile{
public static void main(String args[]){
File f=new File("test.txt");
try{
if(!f.exists())
f.createNewFile();
else
System.out.println("exists");
}catch(Exception e){
e.printStackTrace();
}
}
}
boolean mkdir()/mkdirs()
boolean renameTo(File destination)
例子://看一下这 mkdir()/mkdirs() 的区别和 renameTo 的用法
import java.io.*;
public class CreateDir{
public static void main(String args[]){
File f=new File("test.txt");
File f1=new File("Dir");
File f2=new File("Top/Bottom");
File f3=new File("newTest.txt");
try{
f.renameTo(f3);
f1.mkdir();
f2.mkdirs();
}catch(Exception e){
e.printStackTrace();
}
}
}
String getPath()/getAbsolutePath()
String getParent()/getName()
例子://硬盘上并没有parent 目录和 test.txt 文件,但我们仍然可以操作,因为我们创建了他们的对象,是对对象进行操作
import java.io.*;
public class Test{
public static void main(String args[]){
File f=new File("parent/test.txt");
File f1=new File("newTest.txt");
try{
System.out.println(f.getParent());
System.out.println(f.getName());
System.out.println(f1.getPath());
System.out.println(f1.getAbsolutePath());
}catch(Exception e){
e.printStackTrace();
}
}
}
String list[] //显示目录下所有文件
long lastModified() //返回 1970.1.1 到最后修改时间的秒数
boolean isDirectory()
例子://列出目录下的所有文件和目录,最后修改时间,是目录的后面标出
,是文件的后面标出文件长度
import java.io.*;
import java.util.*;
public class Dir{
public static void main(String args[]){
File f=new File("Dir");
String[] listAll=null;
File temp=null;
try{
listAll=f.list();
for(int i=0;itemp=new File(listAll);
System.out.print(listAll+"\t");
if(temp.isDirectory())
System.out.print("\t
\t");
else
System.out.print(temp.length()+"\t");
System.out.println(new Date(temp.lastModified()));
}
}catch(Exception e){
e.printStackTrace();
}
}
}
5.文件流的建立
File f=new File("temp.txt");
FileInputStream in=new FileInputStream(f);
FileOutputStream out=new FileOutputStream(f);
例子:文件拷贝
import java.io.*;
public class Copy{
public static void main(String args[]){
FileInputStream fis=null;
FileOutputStream fos=null;
try{
fis=new FileInputStream("c2.gif");
fos=new FileOutputStream("c2_copy.gif");
int c;
while((c=fis.read()) != -1)
fos.write(c);
}catch(Exception e){
e.printStackTrace();
}finally{
if(fis != null) try{ fis.close(); }catch(Exception e){ e.printStackTrace(); }
if(fos!= null) try{ fos.close(); }catch(Exception e){ e.printStackTrace(); }
}
}
}6.缓冲区流
BufferedInputStream
BufferedOutputStream
他们是在普通文件流上加了缓冲的功能,所以构造他们时要先构造普通流
例子:文件拷贝的缓冲改进
import java.io.*;
public class Copy{
public static void main(String args[]){
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
byte buf[]=new byte[100];
try{
bis=new BufferedInputStream(new FileInputStream("persia.mp3"));
bos=new BufferedOutputStream(new FileOutputStream("persia_copy.mp3"));
int len=0;
while( true ){
len=bis.read(buf);
if(len<=0) break;
bos.write(buf,0,len);
}
bos.flush();//缓冲区只有满时才会将数据输出到输出流,用flush()将未满的缓冲区中数据强制输出
}catch(Exception e){
e.printStackTrace();
}finally{
if(bis != null) try{ bis.close(); }catch(Exception e){ e.printStackTrace(); }
if(bos!= null) try{ bos.close(); }catch(Exception e){ e.printStackTrace(); }
}
}
}7.原始型数据流
DataInputStream
DataOutputStream
他们是在普通流上加了读写原始型数据的功能,所以构造他们时要先构造普通流
方法:
readBoolean()/writeBoolean()
readByte()/writeByte()
readChar()/writeByte()
......
例子://这个流比较简单,要注意的就是读时的顺序要和写时的一样
import java.io.*;
public class DataOut{
public static void main(String args[]){
DataOutputStream dos=null;
try{
dos=new DataOutputStream(new FileOutputStream("dataout.txt"));
dos.writeInt(1);
dos.writeBoolean(true);
dos.writeLong(100L);
dos.writeChar('a');
}catch(Exception e){
e.printStackTrace();
}finally{
if(dos!=null)
try{
dos.close();
}catch(Exception e){
}
}
}
}
import java.io.*;
public class DataIn{
public static void main(String args[]){
DataInputStream dis=null;
try{
dis=new DataInputStream(new FileInputStream("dataout.txt"));
System.out.println(dis.readInt());
System.out.println(dis.readBoolean());
System.out.println(dis.readLong());
System.out.println(dis.readChar());
}catch(Exception e){
e.printStackTrace();
}finally{
if(dis!=null)
try{
dis.close();
}catch(Exception e){
}
}
}
}
如果把计算机组成原理弄懂的话,输入输出流是不是就很容易明白了?
在实际工作中,输入输出流一般怎么应用呢?