导航:首页 > 文件教程 > java文件输入输出流

java文件输入输出流

发布时间:2024-02-02 11:04:53

java中打印流与输出流有什么区别和联系

最简单的理解,输入流就是把数据读入内存的一条通道,至于这里的数据时哪里来的,各个不同的流之间有区别,它可以来自于本地文件,用户键盘的输入,网络服务器等等,总之你要获取数据,就可以通过输入流。相反,输出流就是数据输出的通道,如我们程序中常用的System.out.println();就是通过标准输出流实现打印的...

❷ java 输入输出流 (被采纳为答案者加100分)

其中BufferedInputStream是FileInputStream的子类,你可以理解成同样处理一个文件,BufferedInputStream效率更高,原因是BufferedInputStream采用了更高效的字节流处理方式,
BufferedInputStream才用缓冲流把内在的缓冲器连接到I/O流,允许java程序对多个字节同时操作,这样就提高了效率。

inputstreamreader的构造函数带两个参数,一是关联到的文件,二是字符解码方式. 所以实际上通过inputstreamreader实例读出来的东西已经不是磁盘上原始的字节数据了,而是根据你指定的解码方式(如果你没有指定,则使用系统缺省的,win2000下是gbk/gb2312)把字节流转换成了字符流,注意字节流和字符流的区别,一个字节就是8比特位(32位机器上),而一个字符含多少字节则与不同的编码/解码方式有关了,如gbk是一字节,utf-8是1-3的变长字节,utf-16是2个定长字节.
于是值得你注意的就是当你用inputstreamreader读文件时,你应该知道该文件被存储时是用什么方式编码的,否则你指定错了解码方式,读出来的就是乱码.但是退一步来说,在全英文环境下,问题也没这严重.因为所有的字符集在前七位上都是与ascii兼容的(我猜的,也许有的不是),然而当你的程序涉及中文字符时,肯定是会出错了.
那么fileinputstream的特点呢?它的构造函数就一个,即关联到的文件,既然没有指定解码方式,那它所做的就是只以字节流的方式读出文件而不做任何处理, 你应该用一个字节数组来接受它,对该数组你以后还可以做任何想做的操作。
给你个例子,自己去测试
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.*;

public class test {

/* public static void main(String[] args) {
String str=new String("Face recognition in the thermal infrared domain has received relatively little attention in the literature in comparison with recognition in visible-spectrum imagery");
StringTokenizer token=new StringTokenizer(str);
Hashtable ht=new Hashtable();
while(token.hasMoreTokens()){
String temp=new String(token.nextToken());
ht.put(temp,temp);
}
Enumeration en=ht.keys();
while(en.hasMoreElements()){
Object obj=en.nextElement();
System.out.print("KEY_NO:"+obj);
System.out.println("="+ht.get(obj));
}
}
*/

public static void main(String[] args){
try {
String file1 ="d:\\1.doc";
String file2 ="d:\\2.doc";
File(file1,file2);
readFile(file2);
//fileCheck("d:\\test1.txt");
// readFile("D:\\test1.txt");
// readFileByte("D:\\test1.txt");
// readFileByFile("D:\\test1.txt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void testFile() throws IOException{
File("D:\\test1.txt","D:\\test2.txt");

}
public static void File(String inName,String outName) throws IOException
{
File tmp = new File(outName);
if(!tmp.canRead())tmp.createNewFile();

BufferedInputStream in = new BufferedInputStream(new FileInputStream(inName));
BufferedOutputStream out= new BufferedOutputStream(new FileOutputStream(outName));
File(in,out,true);
}
public static void readFile(String inName) throws IOException
{
BufferedReader read = new BufferedReader (new InputStreamReader(new FileInputStream(inName)));
String b ;
while((b=read.readLine())!=null )
print( b);
}
public static void readFileByte(String inName) throws IOException
{
BufferedInputStream read = new BufferedInputStream (new FileInputStream(inName));
int b = 0;
while((b=read.read())!=-1)
System.out.print ((char)b);
}
public static void readFileByFile(String name) throws IOException
{
File tmp = new File (name);
FileReader fr= new FileReader(tmp);
BufferedReader br = new BufferedReader(fr);
String b;
while((b=br.readLine())!=null)
print(b);

}

public static void File(InputStream in ,OutputStream out, boolean close) throws IOException{
int b;
while((b=in.read())!=-1)
{
out.write(b);
}
in.close();
if(close)
out.close();
}
public static void print(Object o)
{
System.out.println(o);
}
public static void fileCheck(String name) throws IOException
{
print("---"+name+"---");
File f= new File(name);

if(!f.exists())
{
print("fle not exist!");
return;
}

print("Canonical name:"+f.getCanonicalPath());
String p= f.getParent();
if(p!=null)
print("Parent directory :"+p);

if(f.canRead())print("file can be read!");

if(f.canWrite())print("file can be writable!");

Date d = new Date();
d.setTime(f.lastModified());
print("last modified time :"+d);

if(f.isFile())
{
print("file size is :"+f.length()+" bytes");
}else if(f.isDirectory()){print("is a directry!");}
else{
print("neither a directory or a file!");
}

print("");

}

}

❸ java IO输入输出流中的各种字节流,字符流类,我需要都记住吗,还是只要记住几个常用的呢

记住几个常用的就行了, 一般也就是用几个常用的。
字节流
字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是
·字节输出流:OutputStream
·字节输入流:InputStream

字符流
在程序中一个字符等于2个字节,那么java提供了Reader、Writer两个专门操作字符流的类。
·字符输出流:Writer
·字符输入流:Reader

字节-字符转换流
OutputStreamWriter和InputStreamReader
在整个IO包中,实际上就是字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。
[java] view plainprint?
•OutputStreamWriter:是Writer的子类,将输出的字符流转换为字节流。即:将一个字节流的输出对象变为字节流的输出对象
•InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。

❹ java 中对输入输出流类型重复调用,只对最后一次调用进行关闭,之前的调用不关闭,会有什么后果

不是很理解 随便说说
你当然可以不关闭 之所以用完就关闭 是防止占用连接资源以及连接冲突 有些连接你不关闭的话 其他地方就不能使用了 并不是一定需要关闭 有些时候为了重用 是特意不关闭的 比如说数据库连接池 他就是打开指定数目的数据连接 不关闭 程序需要使用数据库连接了从连接池获取 连接池负责管理连接 比如说保证给程序的是一个可用连接等等
一般情况下上层流关闭的同时也会将下层流关闭 比如说你在InputStream上套一个缓冲流 那么你将缓冲流关闭了 InputStream同时也会关闭的 你如果套了好几个的话 那么只要关闭一个 其他所有流都没办法使用了 因为它们作为基本的流已经关闭了

阅读全文

与java文件输入输出流相关的资料

热点内容
视频文件压缩后有多大 浏览:634
java画砖石图形 浏览:210
nsh是什么文件 浏览:119
手机QQ怎么不能传文件 浏览:450
u盘复制文件的速度取决于什么 浏览:659
iphone4下拉通知栏 浏览:427
javasocket接收数据包 浏览:137
如何给类数据成员变量设置默认值 浏览:885
密集app怎么推广 浏览:866
WP7屏幕保护程序 浏览:568
win10双硬盘老蓝屏 浏览:986
怎么设置网站描述 浏览:274
微信压缩包可以发送多大文件 浏览:916
u盘打开很卡无法复制里面文件 浏览:143
app怎么删不掉 浏览:324
农村工作一号文件图片 浏览:598
锤子手机怎么样升级 浏览:706
微信朋友圈哲理说说 浏览:649
jscss模板 浏览:472
图片文件夹里多了一个 浏览:305

友情链接