java文件操作及各种流的作用

java文件操作及各种流的作用
java文件操作及各种流的作用

关于编码方式我们不讲,有兴趣自己去看,这里大概提一下。

UTF-16采用等幅编码,即每个字符占2个字节。优点:简单;缺点:西文会膨胀到200%,冗余!而且字与字之间的疆界不好找,容易划分错误,没有考虑好前缀问题。这一点huffman编码做的很好。

UTF-8为不等幅编码,有1到3个字节的不等长度。优点:由于采用了很好的前缀,不会出现字之间疆界不好找和划分错误的情况。缺点:中日韩等文字膨胀到150%,冗余。

现在主要说一下字节流、字符流的区别,顾名思义字节流是以字节为单位读取数据的,而字符流是以字符为单位读取的。我们都知道java采用了两种I/O读写方式主要有两个超类系:一个是inputstream和outputstream字节流类系;另一个是Reader和Writer 字符流类系。使用他们来读写文本文件时有些要注意的问题:

1、使用inputstream类的子类读取的单位为字节,对于英语字母(只占一个字节)不受任何影响,而中文文字在unicode编码为两个字节(或者以上?),在读取中一个中文文字会被划分为两个(或多个)字节,因而受到影响。

如果将读取到的字节保存在byte[]数组中,为了正确地处理字节到字符的转化应注意如下问题:

对byte[]数组采用toString的方法转化为字符,会导致错误的分割方式生成字符,不能正确地显示字符;而采用String的构造函数String(byte[] b)可以正确的分割构造字符。(或者String(byte[] b, Charset a)带编码方式的构造函数,在知道要读入的文本的编码方式的情况下。)

2、使用Reader类的子类读取的单位为字符,即中文、英文都为两个字节大小,故而都不受影响。

如果将读取到的每一个字符保存到一个字符数组char[] a中问题又来了:

(特别注意!!!)如对字符数组char[]使用toString()函数时同样会遇到错误的分隔,建议使用String类的构造函数String(char[] c)来构造正确的字符划分。

当然有更简便的方法:如果你采用的读取函数是readline()当然不存在如上字符转换的问题(请注意在InputStream类系的子类中是不存在类似readline()这样的函数的,只有read()这样的函数)。

StringBuffer就像一个动态数组一样,我可以保存任意长的char字符,需要时只需将他们读取出来就行了。

在这里我们将读到的每一个byte转化为一个char保存在StringBuffer中,需要时将他们读出再转化为byte,此过程数据不会溢出,精度不会受到损失。

另外好像对转义字符’\’,String类的split(String a)函数出现了问题,这是怎么回事?java本身的bug吗?

当一个带完整文件夹路径的文件名,传给File类的mkdir(String FilePathAndName)函数时一定要小心,如果该文件名中包含的文件路径不存在(或者说还未被创建的)的话,直接用此函数创建文件是会出错的,你需要先一层层的创建好这些路径方可创建该路径下的文件。(创建路径和文件其实是一个函数,本质上也没有什么区别!^_^)

下面是我写的测试程序,代码如下。

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.nio.CharBuffer;

public class FileReaderWriter {

public FileReaderWriter() {

}

public String reader(String fullpath) throws FileNotFoundException

//用readline的方式读取文件内容

{

try

{

String content ="";

File file = new File(fullpath);

if(file.exists())

{

System.out.println("FILE: "+fullpath+" EXIST, Now I will read it!"); FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

try {

System.out.println("-----------Now is content of file(Reading):----------"); int n = 0;

for(;;)

{

n++;

String temp = br.readLine();

System.out.println("Line"+n+":");

System.out.println(temp);

content+=temp;

if(temp==null)

{

System.out.println("----------OVER---------");

br.close();

break;

}

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

else

{

System.out.println("FILE:"+fullpath+" is Not EXIST"+"now I will do nothing but exit");

}

return content;

}

catch (FileNotFoundException ex)

{

ex.printStackTrace();

}

return null;

}

public void writer(String fullpath,String content)

{

File f = new File(fullpath);

if(!f.exists())

{

System.out.println("File is not exist! Now I will create it!");

createfile(fullpath);

//f.mkdir();//带有目录时这样创建是不行的

}

FileWriter fw;

try

{

fw = new FileWriter(f);

BufferedWriter bw = new BufferedWriter(fw);

System.out.println("I am Writing Now!");

bw.write(content);

bw.close();

System.out.println("-----------Writing Content:---------");

System.out.println(content);

System.out.println("------------Writing Complete!-------------");

} catch (IOException ex) {

ex.printStackTrace();

}

}

public static void main(String[] args)

{

FileReaderWriter frw = new FileReaderWriter();

//做一下各种文件路径的测试^_^

//String path ="info.txt";

//String path2 = "stream.txt";

//String path ="d:\try1/1\2\info.txt";

//String path2 = "d:\try2\1/2/3\stream.txt";

//String path2 = "\4/2/3\stream.txt";

String path ="1\2\info.txt";

String path2 = "1/2/stream.txt";

String test ="";

String text1 ="Hello, My name is GuiZhiPengn";

String text2 ="我的名字是桂志鹏n";

String text3 ="I come From China! Now I'm Studying in WuHan University of HuBei Province.n";

String text4 ="我来自中国,现在湖北省的武汉大学读书";

test= text1+text2+text3+text4;

frw.writer(path,test);

try {

frw.reader(path);

} catch (FileNotFoundException ex) {

ex.printStackTrace();

}

frw.outputstream(path2,test);

frw.inputstream(path2);

//frw.inputstream("LoginEndpoint.wsdl");

}

public String readerbycharacter(String fullpath) throws IOException

//试图通过一个字节一个字节(或者一个字符一个字符)的读取方式读出流后恢复字符

编码,

{

String content ="";

File f = new File(fullpath);

FileReader fr;

int in;

try {

fr = new FileReader(f);

BufferedReader br = new BufferedReader(fr);

StringBuffer sb = new StringBuffer();

//byte[] save = new byte[1000];

//char[] save = new char[1000];

int num =0;

do

{

in = br.read();

if(in!=-1)

{

byte b = (byte)in;//强制转化会出现问题(有中文时,将char转化为byte损失位数,将使中文显示有问题)

char c = (char)in;

sb.append(c);

System.out.println(c);

System.out.println(b);

System.out.println((char)b);

//save[num++] = b;

num++;

}

}while(in!=-1);

br.close();

System.out.println("NUM: "+num);

System.out.println("CHAR Num: " + sb.length());

//content = new String(save);

content = sb.toString();

//content = new String(t);

//content = t.toString();

System.out.println(content);

writer("test.txt",content);

}

catch (FileNotFoundException ex)

{

ex.printStackTrace();

}

return content;

}

public String inputstream(String fullpath)

{

File f = new File(fullpath);

int inbyte = 0;

String content ="";

StringBuffer sb = new StringBuffer();

int num=0;

try {

FileInputStream fin = new FileInputStream(f); BufferedInputStream bin = new BufferedInputStream(fin); do

{

try {

inbyte = bin.read();

} catch (IOException ex) {

ex.printStackTrace();

}

if(inbyte!=-1)

{

sb.append((char)inbyte);

//System.out.println((char)inbyte);

num++;

}

}while(inbyte!=-1);

try {

bin.close();

} catch (IOException ex) {

ex.printStackTrace();

}

System.out.println("Num: "+num);

byte[] save = new byte[num];

for(int i = 0; i

{

save[i] = (byte)sb.charAt(i);

}

content = new String(save);

System.out.println(content);

System.out.println("Reading stream success!");

} catch (FileNotFoundException ex) {

ex.printStackTrace();

}

return content;

}

public void outputstream(String fullpath, String content)

{

File f = new File(fullpath);

if(!f.exists())

{

System.out.println("File is not exist! Now I will create it!"); createfile(fullpath);

//f.mkdir();//fullpath中带有目录时这样创建方式是不行的

}

int inbyte = 0;

try {

FileOutputStream fout = new FileOutputStream(f); BufferedOutputStream bout = new BufferedOutputStream(fout);

try {

bout.write(content.getBytes());

} catch (IOException ex) {

ex.printStackTrace();

}

try {

bout.close();

} catch (IOException ex) {

ex.printStackTrace();

}

System.out.println("Writing Stream Success!");

} catch (FileNotFoundException ex) {

ex.printStackTrace();

}

}

public void createfile(String fullpath)

{

System.out.println("---------In CreateFile Fouction---------"); String[] paths = null;

String propath = null;

File f;

int i;

if(fullpath.indexOf("")!=-1)

{

System.out.println("?????");

//paths = fullpath.split("");此函数执行有问

题:java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

fullpath = fullpath.replace('\','/');

}

if(fullpath.indexOf("/")!=-1)

{

System.out.println("!!!!!");

paths = fullpath.split("/");

}

//if(paths[0].indexOf(":")!=-1)

if(paths!=null)

{

for(i = 0; i

{

if(propath!=null)

propath=propath+"/"+paths[i];

else

propath = paths[0];

f = new File(propath);

if(!f.exists())

f.mkdir();

}

}

else

{

f = new File(fullpath);

}

}

}

后记:一位朋友对我的文章给出了很好的答案^_^顶了,谢谢

当操作的对象不需要关心编码问题时应该使用InputStream/OutputStream系列的类。例如读取二进制文件(EXE等)。

当需要关心编码问题时应该使用Reader/Writer系列的类。

String.split()的参数是正则表达式。所以想以分割字符串的话应该这样:str.("\");

java文件流操作

java 文件流操作 2010-05-08 20:17:23| 分类:java SE | 标签:|字号大中小订阅 java中多种方式读文件 一、多种方式读文件内容。 1、按字节读取文件内容InputStream 读取的是字节 2、按字符读取文件内容InputStreamReader 读取的是字符 3、按行读取文件内容BufferredReader 可以读取行 4、随机读取文件内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。* @param fileName 文件的名 */ public static void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while((tempbyte=in.read()) != -1){ System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); //一次读多个字节

java创建txt文件并进行读写修改操作

java创建txt文件并进行读写修改操作 import java.io.*;/** * * 功能描述:创建TXT文件并进行读、写、修改操作* */ public class ReadWriteFile { public static BufferedReader bufread; //指定文件路径和名称 private static String path = "D:/suncity.txt"; private static File filename = new File(path); private static String readStr =""; /** * 创建文本文件. * @throws IOException * */ public static void creatTxtFile() throws IOException{ if (!filename.exists()) { filename.createNewFile(); System.err.println(filename + "已创建!"); }

} /** * 读取文本文件. * */ public static String readTxtFile(){ String read; FileReader fileread; try { fileread = new FileReader(filename); bufread = new BufferedReader(fileread); try { while ((read = bufread.readLine()) != null) { readStr = readStr + read+ "\r\n"; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block

java对文件名的几个操作,获取文件扩展名,去掉扩展名

java对文件名的几个操作,获取文件扩展名,去掉扩展名 /** * Return the extension portion of the file's name . * * @see #getExtension */ public static String getExtension(File f) { return (f != null) ? getExtension(f.getName()) : ""; } public static String getExtension(String filename) { return getExtension(filename, ""); } public static String getExtension(String filename) { return getExtension(filename, ""); } public static String getExtension(String filename, String defExt) { if ((filename != null) && (filename.length() > 0)) { int i = https://www.360docs.net/doc/258358700.html,stIndexOf('.'); if ((i >-1) && (i < (filename.length() - 1))) { return filename.substring(i + 1); } } return defExt; } public static String trimExtension(String filename) { if ((filename != null) && (filename.length() > 0)) { int i = https://www.360docs.net/doc/258358700.html,stIndexOf('.'); if ((i >-1) && (i < (filename.length()))) { return filename.substring(0, i); } } return filename; } substring(参数)是java中截取字符串的一个方法 有两种传参方式

Java 输入输出流及文件读写详解

I/O类体系 在JDK API中,基础的IO类都位于java.io包,而新实现的IO类则位于一系列以java.nio开头的包名中,这里首先介绍java.io包中类的体系结构。 按照前面的说明,流是有方向的,则整个流的结构按照流的方向可以划分为两类: 1、输入流: 该类流将外部数据源的数据转换为流,程序通过读取该类流中的数据,完成对于外部数据源中数据的读入。 2、输出流: 该类流完成将流中的数据转换到对应的数据源中,程序通过向该类流中写入数据,完成将数据写入到对应的外部数据源中。 而在实际实现时,由于JDK API历史的原因,在java.io包中又实现了两类流:字节流(byte stream)和字符流(char stream)。这两种流实现的是流中数据序列的单位,在字节流中,数据序列以byte为单位,也就是流中的数据按照一个byte一个byte的顺序实现成流,对于该类流操作的基本单位是一个byte,而对于字节流,数据序列以char为单位,也就是流中的数据按照一个char一个插入的顺序实现成流,对于该类流操作的基本单位是一个char。 另外字节流是从JDK1.0开始加入到API中的,而字符流则是从JDK1.1开始才加入到API中的,对于现在使用的JDK版本来说,这两类流都包含在API的内部。在实际使用时,字符流的效率要比字节流高一些。 在实际使用时,字符流中的类基本上和字节流中的类对应,所以在开始学习IO类时,可以从最基础的字节流开始学习。 在SUN设计JDK的IO类时,按照以上的分类,为每个系列的类设计了一个父类,而实现具体操作的类都作为该系列类的子类,则IO类设计时的四个体系中每个体系中对应的父类分别是: 字节输入流InputStream 该类是IO编程中所有字节输入流的父类,熟悉该类的使用将对使用字节输入流产生很大的帮助,下面做一下详细的介绍。 按照前面介绍的流的概念,字节输入流完成的是按照字节形式构造读取数据的输入流的结构,每个该类的对象就是一个实际的输入流,在构造时由API完成将外部数据源转换为流对象的操作,这种转换对程序员来说是透明的。在程序使用时,程序员只需要读取该流对象,就可以完成对于外部数据的读取了。

java读写文件避免中文乱码

1、JAVA读取文件,避免中文乱码。 /** * 读取文件内容 * * @param filePathAndName * String 如c:\\1.txt 绝对路径 * @return boolean */ public static String readFile(String filePathAndName) { String fileContent = ""; try { File f = new File(filePathAndName); if(f.isFile()&&f.exists()){ InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8"); BufferedReader reader=new BufferedReader(read); String line; while ((line = reader.readLine()) != null) { fileContent += line; } read.close(); } } catch (Exception e) { System.out.println("读取文件内容操作出错"); e.printStackTrace(); } return fileContent; } 2、JAVA写入文件,避免中文乱码。 public static void writeFile(String filePathAndName, String fileContent) { try { File f = new File(filePathAndName); if (!f.exists()) { f.createNewFile(); } OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"UTF-8"); BufferedWriter writer=new BufferedWriter(write); //PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName))); //PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName)); writer.write(fileContent);

java文件读写代码

1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while ((tempbyte = in.read()) != -1) { System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); }

java File文件操作和文件流的详解(福哥出品)

一. 创建文件 (1)最常用的(获得一个固定路径下的文件对象) File parentFile = new File(“D:\\My Documents\\.....”);//参数是一个路径的字符串。 (2)在父目录创建一个名为child的文件对象,child 为文件对象的名字 File chileFile= new File(“D:\\My Documents\\.....”,String child); 或File chileFile= new File(parentFile,String child); 二,常见文件夹属性和方法 (1)createNewFile(); 该方法的作用是创建指定的文件。该方法只能用于创建文件,不能用于创建文 件夹,且文件路径中包含的文件夹必须存在 File file=new ("D:\\My Document\\text.txt"); file.createNewFile(); 这样就会在D盘下的My Document 创建text.txt的记事本(注意:首先得保 证D盘下有My Documen这个文件夹) (2)mkdir(); 根据File对象的名字(路径)创建一个目录(文件夹),如果是相对目录,则新建的目

录在当前目录下 (3)mkdirs(); 如果File对象名字有多级目录,则可以调用该方法一次性创建多级目录。 (4)exists(); 判断File对象指向的文件是否存在,返回一个boolean类型(5)isDirectory(); 判断File对象指向的文件是否为目录,返回一个boolean类型的值,true或者false。 (6)getName();获得文件名称(不带路径) (7)length(); 得到File对象指向文件的长度,以字节计算,返回一个长整形的值(long);注意:在 系统中,文件夹(目录)的大小为零,也就是不占用空间,使用length()时返回的是0 (8)delete(); 删除File对象所指定的文件 (9)isFile(); 判断File对象指向的文件是不是标准文件(就像图片,音乐文件等) 三,文件的属性和方法 1.File.separator 当前操作系统的名称分隔符,等于字符串“\”.

如何使用java语言向文件中输入数据和从文件中读取数据

1、文件输入流 向文件中写入数据 Sink输出流 节点流-——文件节点 FileOutStream——字节形式存储内容 FileWriter——字符型式存储内容 import java.io.*; public class P1{ public static void main(String[]args)throws Exception{ //TODO Auto-generated method stub FileOutputStream out=new FileOutputStream("text.txt"); out.write('a'); String str="Hello world"; byte[]buffer=str.getBytes(); out.write(buffer); out.write(buffer,6,5); out.close(); } } 输出:aHello world!world 2、从文件中读取数据 Source输入流 节点流——文件节点 FileReader——字符文件 FileInputStream——字节文件 import java.io.*; public class P1{ public static void main(String[]args)throws Exception{ //TODO Auto-generated method stub FileInputStream input=new FileInputStream("text.txt"); int ch=input.read();//读入一个字节 while(ch!=-1) { System.out.print((char)ch); ch=input.read(); } input.close();

Java流(文件读写操作)

Java流 一、流的分类 ?按数据流动方向 –输入流:只能从中读取字节数据,而不能向其写出数据 –输出流:只能向其写入字节数据,而不能从中读取数据?按照流所处理的数据类型 –字节流:用于处理字节数据。 –字符流:用于处理Unicode字符数据。 ?按照流所处理的源 –节点流:从/向一个特定的IO设备读/写数据的流。(低级流)–处理流:对已存在的流进行连接和封装的流。(高级流)二、缓冲流 ?缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。 ?J2SDK提供了四种缓存流: –BufferedReader –BufferedWriter –BufferedInputStream s –BufferedOutputStream

?缓冲输入流支持其父类的mark()和reset()方法: –mark()用于“标记”当前位置,就像加入了一个书签,可以使用reset()方法返回这个标记重新读取数据。?BufferedReader提供了readLine()方法用于读取一行字符串(以\r 或\n分隔)。 ?BufferedWriter提供了newLine()用于写入一个行分隔符。 ?对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()方法将会使内存中的数据立刻写出。 三、类层次 3.1、InputStream类层次

3.2、OutputStream类层次 3.3、Reader类层次

3.4、Writer类层次 四、常用的字符流与字节流的转化 说明: 1.字节流用于读写诸如图像数据之类的原始字节流。 2.字符流用于读写诸如文件数据之类的字符流。 3.低级流能和外设交流。 4.高级流能提高效率。 5.InputStreamReader 是字节流通向字符流的桥梁。 6.OutputStreamWriter 是字符流通向字节流的桥梁。

java输入输出流和文件操作

Java IO流和文件操作Java流操作有关的类或接口: Java流类图结构:

1、File类 File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。 构造方法摘要 File(File parent, String child) File(String pathname) File(String parent, String child) 构造函数 创建方法 1.boolean createNewFile() 不存在返回true 存在返回false 2.boolean mkdir() 创建目录 3.boolean mkdirs() 创建多级目录 删除方法 1.boolean delete() 2.boolean deleteOnExit() 文件使用完成后删除 例子1:列出指定文件夹的文件或文件夹 public class FileDemo1 { public static void main(String[] args){ File[] files =File.listRoots(); for(File file:files){

System.out.println(file); if(file.length()>0){ String[] filenames =file.list(); for(String filename:filenames){ System.out.println(filename); } } } } } 例子2:文件过滤 import java.io.File; public class FileTest2 { public static void main(String[] args) { File file = new File("file"); String[] names = file.list(); for(String name : names) { if(name.endsWith(".java")) { System.out.println(name); }

java将对象保存到文件中从文件中读取对象

1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: public static void writeObjectToFile(Object obj) { File file =new File("test.dat"); FileOutputStream out; try { out = new FileOutputStream(file); ObjectOutputStream objOut=new ObjectOutputStream(out); objOut.writeObject(obj); objOut.flush(); objOut.close(); System.out.println("write object success!"); } catch (IOException e) { System.out.println("write object failed"); e.printStackTrace(); } } 参数obj一定要实现Serializable接口,否则会抛出 java.io.NotSerializableException异常。另外,如果写入的对象是一个容器,例如List、Map,也要保证容器中的每个元素也都是实现了Serializable 接口。例如,如果按照如下方法声明一个Hashmap,并调用writeObjectToFile方法就会抛出异常。但是如果是 Hashmap就不会出问题,因为String类已经实现了Serializable接口。另外如果是自己创建的类,如果继承的基类没有实现Serializable,那么该类需要实现Serializable,否则也无法通过这种方法写入到文件中。 Object obj=new Object(); //failed,the object in map does not implement Serializable interface HashMap objMap=new HashMap(); objMap.put("test", obj); writeObjectToFile(objMap);

Java 对文件读写操作

Java 对文件进行读写操作的例子很多,让初学者感到十分困惑,我觉得有必要将各种方法进行 一次分析,归类,理清不同方法之间的异同点。 一.在JDK 1.0 中,通常是用InputStream & OutputStream 这两个基类来进行读写操作的。InputStream 中的FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在 OutputStream 中我们有FileOutputStream 这个对象。 用FileInputStream 来读取数据的常用方法是: FileInputStream fstream = new FileInputStream(args[0]); DataInputStream in = new DataInputStream(fstream); 用in.readLine() 来得到数据,然后用in.close() 关闭输入流。 完整代码见Example 1。 用FileOutputStream 来写入数据的常用方法是: FileOutputStream out out = new FileOutputStream("myfile.txt"); PrintStream p = new PrintStream( out ); 用p.println() 来写入数据,然后用p.close() 关闭输入。 完整代码见Example 2。 二.在JDK 1.1中,支持两个新的对象Reader & Writer,它们只能用来对文本文件进行操作,而 JDK1.1中的InputStream & OutputStream 可以对文本文件或二进制文件进行操作。 用FileReader 来读取文件的常用方法是: FileReader fr = new FileReader("mydata.txt"); BufferedReader br = new BufferedReader(fr); 用br.readLing() 来读出数据,然后用br.close() 关闭缓存,用fr.close() 关闭文件。 完整代码见Example 3。 用FileWriter 来写入文件的常用方法是: FileWriter fw = new FileWriter("mydata.txt"); PrintWriter out = new PrintWriter(fw); 在用out.print 或out.println 来往文件中写入数据,out.print 和out.println的唯一区别是后者写 入数据或会自动开一新行。写完后要记得用out.close() 关闭输出,用fw.close() 关闭文件。完整代码见Example 4。 -------------------------------------------------------------- following is the source code of examples------------------------------------------------------ Example 1:

java文件流介绍

Input / Output:指跨越出JVM的边界,与外界数据的源头或者目标数据源进行数据交换. 输出Output -------------------------------> JVM 数据源 <------------------------------- 输入Input 注意:输入/输出是针对JVM 而言。 File 类 可表示一个文件,也有可能是一个目录(在JA V A中文件和目录都属于这个类中,而且区分不是非常的明显,可以调用isDirectory()和isFile()来判断)。 File file = new File("c:\\abc.txt"); 常用的方法: exists() 用来判断文件或目录是否在硬盘存在。 isDirectory() 判断是否是目录 isFile() 判断是否是文件 mkdir() 创建目录 mkdirs() 创建目录包括它下面的子目录。 getAbsolutePath() 得到文件绝对路径 list() 得到文件名的String数组(得到当前目录下的文件名,目录名) listFiles() 返回File类型数组,(目录,文件的File对象)可用getName()得到文件名。 delete() 删除文件 getName() 得到文件名 getPath() 得到文件相对路径 separtor() 得到文件分隔符//这个方法有更好的通用性,平台不同结果不同 deleteOnExit() 在进程退出的时候删除文件,常用在临时文件的删除。 1、流的概念: 输出流 程序----------->文件、网络 程序<-----------数据来源 输入流 2、流的分类: 按处理方式来分: 字节流:按8位传输InputStream OutputStream 字符流:按16位传输Reader Writer 按功能来分: 节点流:与文件、网络打交道的流,操作数据的来源 处理流(包装流):操作节点流

Java读写类

读取控制台输入: BufferedReader(Reader inputReader); Reader是抽象类,其一个子类为InputStreamReader,负责将字节转换为字符InputStreamReader(InputStream inputStream); InputStream的一个对象为System.in Read()读取一个字符返回一个整数,与结束符返回-1 想控制台输出: 可以用System.out对象 可以使用PrintWrite类: PrintWrite(OutputStream outputStream , Boolean fulshOnNewline); OutputStream的一个对象是System.out 文件读写 常用流: FlileInputStream(String filename); 读文件 FlileOutputStream(String filename); 写文件 read();读一个字节,与结束符返回-1 write();写一个字节 applet是在Internet服务中被访问的。 Objref instanceof type:判断objred对象是否能转化为tyep类的一个对象 File类: IsFile()判断是否为文件 IsDiretory()判断是否为目录 String[] list() 获得目录下的所有文件盒子目录 String [] list (FilenameFilter ffobj); 通过ffobj限定列出的文件格式FilenameFilter接口的一个是现实为OnlyExt类, 例如:FilenameFilter only=new OnlyExt(“html”); File [] listFile(); File [] listFile(FilenameFilter ffobj); File [] listFile(FileFilter fobj);返回是定路径的文件

java文件读写常见问题

1.public FileOutputStream(String name)throws FileNotFoundException{ 2.this(name!=null?new File(name):null,false); 3.} 4. 5.public FileOutputStream(File file,boolean append) 6.throws FileNotFoundException 7.{//注意:file.getPath()就是fullPath 8.String name=(file!=null?file.getPath():null); 9.SecurityManager security=System.getSecurityManager(); 10.if(security!=null){ 11.security.checkWrite(name); 12.} 13.if(name==null){ 14.throw new NullPointerException(); 15.} 16.fd=new FileDescriptor(); 17.this.append=append; 18.if(append){ 19.openAppend(name); 20.}else{ 21.open(name); 22.} 23.} FileInputStream(作为输入源的文件) If the named file 1.does not exist(不存在)

2.is a directory rather than a regular file(存在,但,是个目录) 3.for some other reason cannot be opened for reading(无法打开) then a FileNotFoundException is thrown. FileOutputStream(接受写,被写) If the file 1.exists but is a directory rather than a regular file(是个目录) 2.does not exist but cannot be created(无此文件,且无法创建此文件。隔着一个不存在的目录则无法创建,否则可以创建) 3.cannot be opened for any other reason(无法打开) then a FileNotFoundException is thrown. 例如,存在下面的情况 C:/abc.txt(不存在abc.txt) C:/AFolder/abc.txt(不存在AFolder/abc.txt,隔着一个不存在的目录) C:/Folder(已存在文件夹Folder) FileInputStream C:/abc.txt(不存在abc.txt。这是输入源,隔不隔不存在的目录都一样,只要不存在就不行) java.io.FileNotFoundException:C:\abc.txt(系统找不到指定的文件。) C:/AFolder/abc.txt(不存在AFolder/abc.txt。这是输入源,隔不隔不存在的目录都一样,只要不存在就不行) java.io.FileNotFoundException:C:\AFolder\abc.txt(系统找不到指定的路径。) C:/Folder(已存在文件夹Folder) java.io.FileNotFoundException:C:\Folder(拒绝访问。) FileOutputStream C:/abc.txt(不存在abc.txt) 可以成功(因为Parent Folder已经存在了,abc.txt是否存在无所谓。不隔着不存在的目录,就可以创建成功)

Java文件读写操作代码实现

Java文件读写操作代码实现 package test; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * 一、BufferedReader类 public class BufferedReader extends Reader * 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值足够大。 * 通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader包装所有其 read() * 操作可能开销很高的 Reader(如 FileReader和 InputStreamReader)。 * BufferedReader流能够读取文本行,通过向BufferedReader传递一个Reader对象

* ,来创建一个BufferedReader对象,之所以这样做是因为FileReader没有提供读取文本行的功能. * * 二、InputStreamReader类 * * InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader类 * * InputStreamReader isr = new InputStreamReader(InputStream in,String * charsetName);//构造一个指定编码集的InputStreamReader类。 * * 参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。 * * 或者 InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出 * FileInputStream 为InputStream的子类。 * * 主要方法:int read();//读取单个字符。 int read(char []cbuf);//将读取到的字符存到

Java指定编码读写文件(UTF-8)

Java指定编码读写文件(UTF-8) 读取 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; String FileContent = ""; // 文件很长的话建议使用StringBuffer try { FileInputStream fis = new FileInputStream("d:\\input.txt"); InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { FileContent += line; FileContent += "\r\n"; // 补上换行符 } } catch (Exception e) { e.printStackTrace(); } 写入 import java.io.FileOutputStream; import java.io.OutputStreamWriter; String FileContent = "文件内容"; try { FileOutputStream fos = new FileOutputStream("d:\\output.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8"); osw.write(FileContent); osw.flush(); } catch (Exception e) { e.printStackTrace(); }

Java读取TXT文本文件乱码解决方案

Java读取TXT文本文件乱码解决方案 今天在解析一个文本文件的时候出现了乱码,以前从未遇到,花了点时间解决了,在此总结一下: 首先,先看一下解析的代码: private String[] getProjectData(File file){ String[] data = null; try { BufferedReader br = new BufferedReader(new FileReader(file)); String str = br.readLine(); data = str.split("\t"); br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return data; } 这个方法很简单,就是获取txt文件中的一行数据,然后转换为数组,我这个文本中只有一行。就这种情况下获取到的str是乱码,我想出现乱码肯定是字符集编码的问题,然后自己新建了一个文本文档测试没有问题(开始用的文本时别的程序导出的),所以我估计是开始那个txt文件编码的问题,查看发现是Unicode编码(如何查看txt的编码呢,教你一个笨笨的办法:打开文件——另存为,然后看到最下面的编码,默认选择的就是当前文档的编码格式),问题就出现在这里。问题找到了就好解决了,修改代码为: private String[] getProjectData(File file){ String[] data = null; try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-16")); String str = br.readLine(); data = str.split("\t"); br.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return data; } 使用文件流读取,转换编码为“UTF-16”,这样乱码问题就解决了。 归纳一下: txt文本文档有四种编码选项:ANSI、Unicode、Unicode big endian、UTF-8;默认应该是ANSI 选项,就是系统的默认编码,一般是GBK,这种情况下用第一段代码解析是没有问题的,

相关文档
最新文档