fileinputstream
java文件流操作是一个非常重要的内容。下图列举了关于Java基本的文件流操作,当然目前还有NIO,这个后来会进行讨论,先看基本的文件流操作。我们主要使用的是访问文件的流和缓冲流。
文件的流操作一般包含字符流和字节流,两者区别在于,字符流每次传播16bit数据,字节流一次读取8bit数据。这里先对Java中字节流的使用展开讨论。
必须明确一个概念,流操作包含了输入输出流,其中,输出流指的是文件流输出,也就是将文件流输出到磁盘或者数据库;输入流是从磁盘或者数据库中读取流数据,并打印出来。下面以代码来给大家做个展示。
1 fileinputstream 文件读入
//使用byte[]数组进行读取文件
public void testInput() {
File file=new File("D:\\test.txt");//此处读取的为txt文本,也可以是图片或者其他,但是打印结果会比较尴尬,具体可以试试
FileInputStream fis=null;
try {
fis=new FileInputStream(file);
byte[] b=new byte[5];//读取数据到数组,这里根据读取的问件定大小,图片或者视频可以采用1024以及其倍数
int len;//每次读入byte的字节长度,到末尾为-1
while((len=fis.read(b))!=-1) {
/*这里的i的阈值一定为len 因为len不是固定的 在读到文件末尾时 len
与每次固定读入长度(这里是 5)不一样
*/
for(int i=0;i<len;i++) {
System.out.println((char)b[i]);
}
/*或者这样打印
String str=new String(b,0,len);
System.out.println(str);*/
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printstacktrace();
}finally {
if(fis!=null)
try {
fis.close();//关文件操作 必须要有!!!
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2 文件输出 Fileoutputstream
//文件流输出
public void testOutput() {
//输出目标(其目标可以不存在 可以在程序执行中自行创建,若存在会自动覆盖文件)
File file=new File("D:test1.txt");
//创建一个FileOutputStream对象 将file作为参数传入
FileOutputStream fos=null;
try {
fos=new FileOutputStream(file);
//向文件中写东西(覆盖写法)
fos.write(new String("I love China").getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(fos!=null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3 有了输入和输出的样例,其实我们就可以将文件的输入输出封装为一个工具类,具体操作如下:
//其中 src dst分别为文件的 源地址和目标地址
public void copyFile(String src,String dst) {
//1 提供读入 输出文件(字节流)(可以为txt 或者 图片 视频等)
File file1=new File(src);
File file2=new File(dst);
//提供流对象
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(file1);
fos=new FileOutputStream(file2);
// 实现文件复制
byte[] b=new byte[10];//读取字节长度,根据所传文件大小来定,图片视频一般为1024及其倍数
int len;//每次读入的长度
while((len=fis.read(b))!=-1) {
//写入文件
fos.write(b, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//先关输出
if(fos!=null) {
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//再关输入
if(fis!=null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
方法调用:
public static void main(String[] args) {
String src="D:\\test.txt";//源地址
String dst="D:\\test1.txt";//目标地址
copyFile(src,dst);//进行copy(注意这个方法在这个类里面要是静态,因为直接被main 方法调用了)
}
就可以看到 D盘里有一个test1.txt.
【注意】这里根据字节流进行操作,读取中文时,是读不出来的,因为汉语为字符。后来会对其进行讨论。
相关阅读
在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对
使用@Autowired 自动装载,报java.lang.NullPointerExce
使用@Autowired 自动装载,但是报java.lang.NullPointerException错误, 后来测试,发现如下图所示,jdbcTemplate输出为null 经反复研
Android自定义字体样式Typeface的三种技术方案:Java代
Android实现自定义的字体Typeface,正常情况下有两种情况:第一种:把字体ttf文件放到assets/fonts目录下,然后通过读取字体文件.ttf获取
在java中,?代表通配符。 通配符用法 1. 在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义 2. <? exte
数组是一种数据结构,用来存储同一类型之的集合。通过一个整形下标可以访问数组中的每一个值。在声明数组变量时,需要指出数据类型和