基础知识——Java文件IO

创建文件

?
?

File file=new File("c:/test.txt");

if (!file.exists()) {

try {

file.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

?
?

得到目录下文件名列表

?
?

同样是file,传入目录的路径即可,得到名为dir的File类,利用dir的isDirector方法即可判断是否为目录

?
?

然后用file的list()方法得到目录下的所有文件名,利用dir的getpath获得目录路径,利用File类的separator方法得到分隔符,再加上文件名即可得到文件的全路径名

?
?

写一个复制文件的程序

?
?

主要用到FileInputStream以及FileOutputStream,用到前者的read方法和后者的write方法,另外还要用到一个byte数组用于存放读进来的数据

?
?

FileInputStream fis=new FileInputStream("c:/test.txt");

FileOutputStream fos=new FileOutputStream("c:/test_out.txt");

byte[] buff=new byte[1024];

int len=0;

while ((len=fis.read(buff))>0) {

fos.write(buff);

}

fis.close();

fos.close();

?
?

Stream类

?
?

根据数据的格式不同,可以分为字节流和字符流

?
?

字节流的处理方式

?
?

Java中的基础字节输入流和输出流是InputStream和OutputStream,通过它们衍生出FileInputStream和FileOutputStream;ObjectInputStream和ObjectOutputStream;BufferedInputStream和BufferedOutputStream;等

?
?

字节流的一个最大的特点就是,每次的输入和输出都是一个字节,而计算机处理数据也总是以一个字节为基本单位的

?
?

所以它应用在最原始的流的处理上,比如内存缓存操作,文件复制等不关心流的内容具体是什么

?
?

但是在处理一些具体数据格式的时候,比如文本文件,就需要用到字符流,在这种情况下字符流的效率就要比字节流高很多

?
?

字符流的处理方式

?
?

字符流是由字节流包装而来,它的输入和输出流类型包括StringReader和StringWriter以及BufferedReader和BufferedWriter,对于前者的使用方法上来说根字节流的类似,还是用read和write方法,而对于后者,多了一个针对文本数据的高效方法,那就是readline方法

?
?

BufferedReader需要用到InputStreamReader作为输入,InputStreamReader将字节流转换为字符流,构造InputStreamReader对象时需要用到输入流InputStream以及字符编码作为参数

?
?

InputStream iStream=new FileInputStream("c:/test.txt");

InputStreamReader isReader=new InputStreamReader(iStream);

BufferedReader bReader=new BufferedReader(isReader);

String line=null;

StringBuffer sBuffer=new StringBuffer();

while ((line=bReader.readLine())!=null) {

//System.out.println(line);

sBuffer.append(line);

}

System.out.println(sBuffer);

bReader.close();

?
?

?
?

序列化和反序列化一个对象

?
?

主要用到ObjectInputStream和ObjectOutputStream,另外要序列化的类要继承Serializable接口

?
?

class Student implements Serializable {

private static final long serialVersionUID = 1L;

?
?

然后在需要序列化和反序列化的地方用ObjectInputStream和ObjectOutputStream就可以了,注意输入输出的参数,还是要利用一个路径字符串创建一个字节流

?
?

Student student = new Student("Tong", 23);

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(

"c:/objTest.dat"));

oos.writeObject(student);

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(

"c:/objTest.dat"));

Student student2 = (Student) ois.readObject();

System.out.println(student2.toString());

?
?

时间: 2024-12-17 05:04:10

基础知识——Java文件IO的相关文章

UNIX,基础知识,文件IO,文件和目录

2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc(c,stdout) == EOF) 将字符写到标准输出 err_sys("output error"); if(ferror(stdin)) err_sys("input error"); exit(0);} 从标准输入读命令并执行:int main(){ char

编程基础知识——Java JNI开发流程(2)

android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni,首先需要下载android ndk. 操作步骤,正常建立android工程,然后在android工程那里右键,属性,选择Android Tools -> Add Native Support.就可以为android工程增加本地库支持. 添加支持后的android工程,会增加jni目录,C++代码就写在这个目录里. 新建一个类,并且使用nat

编程基础知识——java类加载

java类加载 先来看一段小程序: package com; public class Main1 { static { System.out.println("1111") ; } public static void main(String[] args) { System.out.println("2222") ; } } 输出结果为: 1111 2222 其中static的执行时机就是class被 classloader加载的时候执行. 这有什么用?看下面代

php杂记——1(基础知识与文件读写)

1.变量前面需要加美元符号"$",常量则不需要: define('PRICE',100); echo PRICE; 2.用一个变量的值作为另一个变量的名称可以得到类似C中的指针变量: 1 $varname = 'tireqty'; 2 $$varname = 5; 3 //等价于下面这条语句 4 $tireqty = 5; 3.number_format()函数可用来格式化一个浮点数的输出精度: $pi = 3.1415926536; echo number_format($pi,2)

python基础知识六 文件的基本操作+菜中菜

基础知识六 文件操作 ? open():打开 ? file:文件的位置(路径) ? mode:操作文件模式 ? encoding:文件编码方式 ? f :文件句柄 f = open("1.txt",mode = 'r',encoding = 'utf-8') print(f.read()) f.close 1.文件操作模式: ? r,w,a(重要) ? rb,wb,ab(次要) ? r+,w+,a+ 1.1 r/w/a 1. r操作: f = open('1.txt','r') pri

Java文件Io基础

本文为java文件应用中一些基础知识的例子和总结,仅供参考 File file2 = new File("D:/test.txt");//创建文件对象,File类中的构造方法中的参数为字符串,表示的是文件的地址,其中,在绝对路径中,磁盘的编号后的斜杆可以为"\\"(Windows系统中路径标识),也可以为"/"(跨平台). 制定路径之下创建的文件对象,不代表着该路径之下有这个文件,也就是说File对象无关实际文件的位置. 可以通过File.exi

Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.一般的格式是与平台无关的二进制流,可以将这种二进制流持久保存在磁盘上,也可以通过网络将这种二进制流传输到另一个网络结点.  反序列化(Anti Serialization ):是指把这种二进制流数据还原成对象. 2. 序列化流 和 反序列化

Java基础知识总结之IO流

理解Java的IO流 流(Stream)的概念:程序与数据来源之间的桥梁 流的分类 按流的方向来分(从程序所在的内存的角度来看): 输入流:把外部输入读入当前程序所在内. 输出流:把当前程序所在内存的数据输出到外部 按流处理得数据来分: 字节流:它处理数据单元是字节(8bit),适应性广.功能强大. 字符流:它处理的数据单元是字符.通常来说它主要处理文本文件,   它在处理文本文件时,比字节流更方便. 字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载