字节输入和输出流
1.FileInputStream[文件字节输入流]->读取文件内容
用途:从文件系统中的文件获得输入字节。经常使用于读取图像、声音等原始字节流,读取字符流可考虑使用FileReader
构造方法:
构造方法摘要 | |
---|---|
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的 File 对象file 指定。 |
|
FileInputStream(FileDescriptor fdObj) 通过使用文件描写叙述符 fdObj 创建一个 FileInputStream ,该文件描写叙述符表示到文件系统中某个实际文件的现有连接。 |
|
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream 。该文件通过文件系统中的路径名 name 指定。 |
经常用法:
方法摘要 | |
---|---|
available() 返回下一次对此输入流调用的方法能够不受堵塞地从此输入流读取(或跳过)的预计剩余字节数。 |
|
|
close() 关闭此文件输入流并释放与此流有关的全部系统资源。 |
finalize() 确保在不再引用文件输入流时调用其 close 方法。
|
|
|
getChannel() 返回与此文件输入流有关的唯一 FileChannel 对象。
|
|
getFD() 返回表示到文件系统中实际文件的连接的 FileDescriptor 对象,该文件系统正被此 FileInputStream 使用。 |
|
read() 从此输入流中读取一个数据字节。 |
|
read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 |
|
read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。 |
|
skip(long n) 从输入流中跳过并丢弃 n 个字节的数据。 |
这里介绍一个最常见的方法:
read(byte[] b, int off, int len)
从此输入流中将最多 len
个字节的数据读入一个 byte 数组中。
->off:b字节数组中的偏移量
小知识:数组偏移量。比方a[1,2,3,4,5]数组,默认数组第一个应该指向a[0],若偏移量为2。则指向a[1]
案例:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
int b;
// 创建输入流
FileInputStream readfile = new FileInputStream("E:\\test.txt");
byte buffer[] = new byte[2500];// 创建字节数组
// 从输入流中读取字节并存入buffer数组中,最长读取2500个字节。返回值b为实际读取的长度
b = readfile.read(buffer, 1, 2000);// 1为buffer数组中的起始偏移量
String str = new String(buffer, 0, b, "Default");
System.out.println(str);
System.out.println(b);
readfile.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2014年8月18日22:14:01
2.FileOutputStream[文件字节输出流]->向文件写入信息
用途:能够向图像等原始字节文件里写入信息
构造函数:
FileOutputStream(File file) 创建一个向指定 File 对象表示的文件里写入数据的文件输出流,覆盖原有数据 |
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件里写入数据的文件输出流,append为true,保持原有数据。追加至末尾 |
FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描写叙述符处写入数据的输出文件流,该文件描写叙述符表示一个到文件系统中的某个实际文件的现有连接。 |
FileOutputStream(String name) 创建一个向具有指定名称的文件里写入数据的输出文件流。 |
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件里写入数据的输出文件流,,append为true,保持原有数据。追加至末尾 |
经常用法:
方法摘要 | |
---|---|
close() 关闭此文件输出流并释放与此流有关的全部系统资源。 |
|
finalize() 清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。
|
|
getChannel() 返回与此文件输出流有关的唯一 FileChannel 对象。
|
|
getFD() 返回与此流有关的文件描写叙述符。 |
|
write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 |
|
write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 開始的 len 个字节写入此文件输出流。 |
|
write(int b) 将指定字节写入此文件输出流。 |
案例:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; public class Test {
public static void main(String[] args) {
try {
int b;
File file = new File("E:\\test.txt");
// 创建输入流
FileInputStream readfile = new FileInputStream(file);
byte buffer[] = new byte[2500];// 创建字节数组
// 从输入流中读取字节并存入buffer数组中,最长读取2500个字节,返回值b为实际读取的长度
b = readfile.read(buffer, 1, 2000);// 1为buffer数组中的起始偏移量
String str = new String(buffer, 0, b, "Default");
System.out.println(str);
readfile.close(); // 关闭流
// 创建一个输出流,true表示保留文件原有数据,新数据追加到结尾处
FileOutputStream writefile = new FileOutputStream(file, true);
writefile.write(buffer, 0, b);
writefile.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
字符输入输出流
1.FileReader[字符输入流]->以字符为单位读取文件内数据信息
2.FileWriter[字符输出流]->以字符为单位向输出流中写入信息
上述两个流操作,构造方法,经常使用函数均与字节流类似,仅仅只是一个处理字节。一个处理字符,用法也非常相近,主要是针对文本化的文件进行操作,而字节流主要处理图像,视频,声音等原始字节文件数据。直接贴一个代码吧!
import java.io.FileReader;
import java.io.FileWriter; public class Test {
public static void main(String[] args) {
try {
// 字符输入流,读取文件信息
FileReader fileread = new FileReader("F:\\test.txt");
char[] cbuf = new char[500];
int b = fileread.read(cbuf, 0, 500);
System.out.println(String.valueOf(cbuf));
fileread.close();
// 字符输出流。想输出流中写入信息,而且保留原有数据,追加数据值末尾处
FileWriter filewriter = new FileWriter("F:\\test.txt", true);
filewriter.write(cbuf);
filewriter.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2014年8月21日23:31:09
这篇文章写到这,我突然感觉,我一直忽略了一个非常重要的类:File
文件类File:
我们首先介绍一下文件。我想,文件这个名词,非常抽象,可是缺非常easy理解。小弟不才没法用文字描写叙述出来呢。在这里我介绍一下文件的简单分类吧:
文件的分类:依据我们程序对文件的訪问方式不同,大致的能够分为一下三个类别:
1.顺序文件(Sequential File):这一类文件一行代表一条数据,按序排列的,每条数据或者记录的长度是不限制的。可长可段。訪问文件内容必须追条进行訪问。
2.随机文件(Random Access File):这样的类型文件最大的特点就是每条数据或者记录的长度是固定一样的,能够随意次序的对文件里记录进行操作,同一时候。每一条记录都有一个唯一的记录号(ID)与之相应,也就是说,仅仅要知道记录号就能够对其进行訪问的。
3.二进制文件(Binary File):这个在我们电脑中最常见只是了,它是字节的集合,直接存取的是二进制码,对于二进制文件的訪问时通过字节数来定位数据的,没有数据类型。
介绍了文件的分类,就切入正题吧,File类的一些基本信息:
在Java语言中,訪问文件或者文件夹。我们都能够通过File类来訪问,甚至能够訪问一个压根不存在的东西。或者说什么都不是也行,我们创建了一个File的实例。也就是File对象之后。假设是一个文件夹,那么我们能够创建和删除文件夹,也能够显示这个文件夹下的文件清单,假设这个对象时文件对象话,这点须要注意。这里我们仅仅能够訪问存储的文件夹信息,文件基本属性,比方文件名称和文件类型,改动文件名称信息等,是不能够进行文件的复制,读取。也就是说我们是不能够对文件的内容进行操作的。这个就属于流操作了。以下简介一下File的简单构造函数和经常使用的方法吧!
作为一个刚開始学习的人。这些东西。我都是在API里面看的,我也是E文盲。我仅仅能看大牛们翻译的啦!
File类基础信息:
1.构造函数信息:
构造方法摘要 | |
---|---|
File(File parent,String child) 依据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 |
|
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
----这种方法最经常使用了。我认为 |
|
File(String parent,String child) 依据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
|
File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 |
2.经常使用字段介绍
字段摘要 | |
---|---|
pathSeparator 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 |
|
pathSeparatorChar 与系统有关的路径分隔符。 |
|
separator 与系统有关的默认名称分隔符。为了方便,它被表示为一个字符串。WIN下是"\",Linux下是“/”。这个最经常使用 |
|
separatorChar 与系统有关的默认名称分隔符。 |
3.经常用法
方法摘要 | |
---|---|
canExecute() 測试应用程序能否够运行此抽象路径名表示的文件。 |
|
|
canRead() 測试应用程序能否够读取此抽象路径名表示的文件。 |
canWrite() 測试应用程序能否够改动此抽象路径名表示的文件。 |
|
compareTo(File pathname) 按字母顺序比較两个抽象路径名。 |
|
createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
|
createTempFile(String prefix,String suffix) 在默认暂时文件文件夹中创建一个空文件。使用给定前缀和后缀生成其名称。 |
|
createTempFile(String prefix,String suffix, 在指定文件夹中创建一个新的空文件。使用给定的前缀和后缀字符串生成其名称。 |
|
delete() 删除此抽象路径名表示的文件或文件夹。 |
|
deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或文件夹。 |
|
equals(Object obj) 測试此抽象路径名与给定对象是否相等。 |
|
exists() 測试此抽象路径名表示的文件或文件夹是否存在。 |
|
getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。 |
|
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 |
|
getCanonicalFile() 返回此抽象路径名的规范形式。 |
|
getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 |
|
getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。 |
|
getName() 返回由此抽象路径名表示的文件或文件夹的名称。 |
|
getParent() 返回此抽象路径名父文件夹的路径名字符串;假设此路径名没有指定父文件夹。则返回 null 。 |
|
getParentFile() 返回此抽象路径名父文件夹的抽象路径名;假设此路径名没有指定父文件夹。则返回 null 。 |
|
getPath() 将此抽象路径名转换为一个路径名字符串。 |
|
getTotalSpace() 返回此抽象路径名指定的分区大小。 |
|
getUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。 |
|
hashCode() 计算此抽象路径名的哈希码。 |
|
isAbsolute() 測试此抽象路径名是否为绝对路径名。 |
|
isDirectory() 測试此抽象路径名表示的文件是否是一个文件夹。 |
|
isFile() 測试此抽象路径名表示的文件是否是一个标准文件。 |
|
isHidden() 測试此抽象路径名指定的文件是否是一个隐藏文件。 |
|
lastModified() 返回此抽象路径名表示的文件最后一次被改动的时间。这个经经常使用到。比方我们通过定时改动文件信息,我写过一个关于定时生成Html的文章。这里用到了 |
|
length() 返回由此抽象路径名表示的文件的长度。 |
|
list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的文件夹中的文件和文件夹。 |
|
list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的文件夹中满足指定过滤器的文件和文件夹。 |
|
listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的文件夹中的文件。返回一个File数组 |
|
listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的文件夹中满足指定过滤器的文件和文件夹。 |
|
listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的文件夹中满足指定过滤器的文件和文件夹。 |
|
listRoots() 列出可用的文件系统根。 |
|
mkdir() 创建此抽象路径名指定的文件夹。 |
|
mkdirs() 创建此抽象路径名指定的文件夹,包含全部必需但不存在的父文件夹。 |
|
renameTo(File dest) 又一次命名此抽象路径名表示的文件。 |
|
setExecutable(boolean executable) 设置此抽象路径名全部者运行权限的一个便捷方法。 |
|
setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的全部者或全部用户的运行权限。 |
|
setLastModified(long time) 设置此抽象路径名指定的文件或文件夹的最后一次改动时间。 |
|
setReadable(boolean readable) 设置此抽象路径名全部者读权限的一个便捷方法。 |
|
setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的全部者或全部用户的读权限。 |
|
setReadOnly() 标记此抽象路径名指定的文件或文件夹,从而仅仅能对其进行读操作。 |
|
setWritable(boolean writable) 设置此抽象路径名全部者写权限的一个便捷方法。 |
|
setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的全部者或全部用户的写权限。 |
|
toString() 返回此抽象路径名的路径名字符串。 |
|
toURI() 构造一个表示此抽象路径名的 file: URI。 |
看这些无用的。还是要自己动手操作的,以下是我自己写的一个简单案例:
import java.io.File;
import java.io.IOException; public class Test {
public static void main(String[] args) throws IOException {
// 实例化一个File对象,注意这个文件夹是不存在的,我们又一次创建
File mydir = new File("F:\\mydir");
if (!mydir.exists()) {
mydir.mkdir(); // 创建这个文件夹
} // 那么我们訪问下面文件夹名试试
System.out.println(mydir.getName());
System.out.println(mydir.getAbsolutePath());
System.out.println(mydir.separator);
// 我们给这个文件夹下创建一个文件吧
File myfile = new File("F:\\mydir\\file.txt");
if (!myfile.exists()) {
myfile.createNewFile();
}
// 我们通过文件夹来訪问文件夹下的这个文件
File files[] = mydir.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
System.out.println(files[i].lastModified());
}
}
}
事实上这几天挺迷茫的,前几周实习感觉挺有方向的。这几天没有给我安排详细的任务,突然感觉非常空洞,夜深的时候,思考自己,我想要什么。当思考明白了自己的目标的时候。迷茫这个词语在脑海中是不存在的。可是这样的迷茫也随这你的生活变化,随时都可能再次出现,所以在这里,我给我自己一句话,再苦再累。自己选的路。当你不想走下去的时候,请回头看看已经老去的爸妈。然后跪着走完这条路!!!
加油,没有过不去砍,认真学,慢慢学。别着急速度。给自己一个理想化的学习态度和一份真诚踏实的心,一路走下去就可以!
呵呵
突然认为这种上述的流操作,仅仅能进行单一的读文件或者向文件写入数据。非常单一,单向的操作,不用操心,java强大的不可挑剔,RandomAccessFile就能够满足我的这个小小愿望:
RandomAccessFile[随机存取字节流]->能够随意的存和取数据,依照特定的数据类型进行写入或者读取操作,能够指定字节跳跃流所指向的文件指针位置
构造函数信息:
构造方法摘要 | |
---|---|
RandomAccessFile(File file, 创建从中读取和向当中写入(可选)的随机訪问文件流,该文件由 File 參数指定。
|
|
RandomAccessFile(String name, 创建从中读取和向当中写入(可选)的随机訪问文件流。该文件具有指定名称。 上述mode取值能够是“r”仅仅读。“w”仅仅写或者“rw”读写 |
经常用法:(方法有非常多可是都非常类似,唯一差别不同就是数据类型不同。也就意味着存取时,流所指向的文件指针跳跃的字节个数不同)
long getFilePointer()
返回此文件里的当前偏移量
long length()
返回此文件的长度,字节数
read()
从此文件里读取一个数据字节
read(byte[] b)
将最多 b.length
个数据字节从此文件读入 byte 数组
read(byte[] b, int off, int len)
将最多 len
个数据字节从此文件读入 byte 数组,off为数组偏移量
readChar()
从此文件读取一个字符,这是一个典型的。还有非常多。比方readInt(),readBoolean()等等数据类型
seek(long pos)
设置到此文件开头測量到的文件指针偏移量,在该位置发生下一个读取或写入操作
skipBytes(int n)
尝试跳过输入的 n
个字节以丢弃跳过的字节
write(byte[] b)
将 b.length
个字节从指定 byte 数组写入到此文件,并从当前文件指针開始
write(byte[] b, int off, int len)
将 len
个字节从指定 byte 数组写入到此文件,并从偏移量 off
处開始
writeBoolean(boolean v)
按单字节值将 boolean
写入该文件,还能够有非常多,比方writeInt()等等
写一个超级简单的样例吧:
import java.io.IOException;
import java.io.RandomAccessFile; public class Test {
public static void main(String[] args) throws IOException {
// 创建一个RAF流,mode类型为“rw”,可写入可读取
RandomAccessFile raf = new RandomAccessFile("F:\\test.txt", "rw");
int num[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < num.length; i++) {
raf.writeInt(num[i]);// 写入int类型数据
}
raf.seek(0L);// 又一次定位流所指向的文件指针位置
for (int i = 0; raf.getFilePointer() < raf.length(); i++) {
raf.seek(i * 4);// 这里的int占四个字节,定位值依照字节定位的
System.out.println(raf.readInt());
}
raf.close();
}
}
未完待续,还有非常多经常使用的流操作,以后会一一补充。非常晚了,该睡觉了,每天抽一点时间学习学习,慢慢积累,I can do it!!
版权声明:本文博客原创文章,博客,未经同意,不得转载。
java常见的输入和输出流案例研究(一个)的更多相关文章
-
java学习之输入,输出流
输入流与输出流 1,流的分类:字节流和字符流 区别如下: 1,字节流(8位Unicode)在操作的时候本身是不会用到缓冲区(内存)的byte,是与文件本身直接操作的,而字符流(16位Unicode)在 ...
-
java 21-11 数据输入、输出流和内存操作流
IO数据流: 可以读写基本数据类型的数据 数据输入流:DataInputStream DataInputStream(InputStream in) 数据输出流:DataOutputStream ...
-
Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
-
第27章 java I/O输入输出流
java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...
-
《Java大学教程》—第11章 案例研究--第1部分
自测题:1. 图11-1的UML设计中各个类之间的关系.Hostel与TenantList是关联关系:TenantList和PaymentList与ObjectList是泛化关系.TenantL ...
-
Java IO学习--输入输出流
一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...
-
Java IO 输入和输出流
数据流是指一组有顺序的,有起点和终点的字节集合. 最初的版本中,java.io 包中的流只有普通的字节流,即以 byte 为基本处理单位的流.字节流用来读写 8 位的数据,由于不会对数据做任何转换,因 ...
-
java实验8-Java输入输出流
1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputS ...
-
Netty实战十四之案例研究(一)
1.Droplr——构建移动服务 Bruno de Carvalho,首席架构师 在Droplr,我们在我的基础设施的核心部分.从我们的API服务器到辅助服务的各个部分都使用了Netty. 这是一个关 ...
随机推荐
-
Spring.Net在Mvc4.0中应用的说明
案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll 2.修改Global文件 (Spring ...
-
Python(六)面向对象、异常处理、反射、单例模式
本章内容: 创建类和对象 面向对象三大特性(封装.继承.多态) 类的成员(字段.方法.属性) 类成员的修饰符(公有.私有) 类的特殊成员 isinstance(obj, cls) & issu ...
-
Bibtex使用方法
BibTeX 是一个使用数据库的的方式来管理参考文献程序, 用于协调LaTeX的参考文献处理. BibTeX 文件的后缀名为 .bib . 先来看一个例子: @article{Gettys90,aut ...
-
coding代码仓库的配置和代码上传
1.生成ssh 在桌面右键,选择Git Bash Here,进入操作界面,输入“ssh-keygen -t rsa -b 4096 -c "xxxxxxxx@xxx.com(自己注册时绑定的 ...
-
Linux(gnu)环境动态链接库的搜索路径
摘自http://blog.csdn.net/saga1979/article/details/14161229 man ld.so(8)说,如果库依赖不包括“/”,那么它将按照下面的规则按顺序搜索: ...
-
Bootstrap模态框垂直高度居中问题
Bootstrap对话框改变其默认宽高,高度不会自适应居中.为解决这个问题,最好的方式是能够通过css来解决,试了几种网上的方案发现都不行.然后想到可以通过js来修正,什么时候修正最好?于是想到可以注 ...
-
Mysql 索引问题-日期索引使用
这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,我的索引是日期类型的,首先想到的是mysql对日期类型的索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多 ...
-
web服务器原理(作业四)
Web服务器简介:Web服务器是指驻留于因特网上某种类型计算机的程序.当web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该 ...
-
2017-07-29 中文代码示例教程之Java编程一天入门
Java编程一天入门 v0.0.1 alpha 共享协议 本作使用署名-非商业使用-禁止演绎协议共享. 前言 Java入门代码用中文写(举例如下)更能被新手理解. 由于至今没有看到类似教程, 在此抛砖 ...
-
Java实现POS打印机自定义无驱打印
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...