文件复制小案例(温习Java基础知识之IO(1)中的知识)
package copy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws IOException {
String from = "E:"+File.separator+"psu.jpg";//要复制的文件
String to = "C:" + File.separator;// 要存储的文件
File file_from = new File(from);// 实例化文件
// 若源文件不存在,则需要退出
if (!file_from.exists()) {
System.out.println("源文件不存在!");
return;
}
File file_to = new File(to);//实例化文件
//若目标位置不存在,退出
if(!file_to.exists()){
System.out.println("目标位置不存在!");
}
file_to = new File(to+"copy.jpg");//新建文件
//实例化输入,输出流(相对于程序而言,数据的流向)
InputStream in = new FileInputStream(file_from);
OutputStream out = new FileOutputStream(file_to);
int temp;
//边度边写
while((temp = in.read())!=-1){
out.write(temp);
}
//关闭流
in.close();
out.close();
}
}
内存操作流(ByteArrayInputStream、ByteArrayOutputStream)
注意:这两个内所操作的数据位置是相对于内存而言,从程序向内存写入数据使用ByteArrayInputStream,反之使用ByteArrayOutputStream.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
/*
* 将字符串读入到内存,将其转换为大写后,输出
*/
public class ByteArrayDemo {
public static void main(String[] args) {
String str = "hello world";//需要操作的字符串
//实例化流对象
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
int temp;
while((temp=in.read())!=-1){
char c=(char)temp;
out.write(Character.toUpperCase(c));
}
//循环结束后,字符串的内容存储在内存中。
System.out.println(out.toString());
}
}
重点注意数据的存在位置。
打印流(PrintStream、PrintWriter)
1、PrintStream
先观察期构造方法:public PrintStream(OutputStream out)
实例化该类时,需要传入字节输出流对象,我们知道OutputStream是一个抽象类,依赖于其子类进行实例化,由此可以推测出,PrintStream类的实例可以根据传入不同的实例化对象完成不同的功能,具体看例子。
package PrintStrem;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
public class PrintStremDemo {
private static PrintStream outPrint;
public static void main(String[] args) throws IOException, IOException {
File file = new File( "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt");
OutputStream out = new FileOutputStream(file,true);
outPrint = new PrintStream(out);
//不换行输出
outPrint.print(false);
outPrint.print(‘c‘);
//换行输出
outPrint.println(true);
outPrint.println(123.3132);
//格式化输出
String name = "高洋";int age = 20;
outPrint.printf("姓名:%s;年龄:%d", name,age);
}
}
从例子中可以看出,这种输出方法很方便,可以输出任意类型数据。
BufferedReader
从缓冲区读入数据,包装输入流,从而提高了读入的效率,因为直接使用输入流的read()方法,是直接对文件进行操作,效率低下。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {
File file = new File("E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt");//创建文件对象
//BufferedReader构造接收Reader类对象进行实例化,所以Reader类的子类的对象都可以为其实例化
BufferedReader read = new BufferedReader(new FileReader(file));
int temp = 0;
while((temp = read.read())!=-1){
char c = (char)temp;
System.out.print(c);
}
read.close();
}
}
时间: 2024-10-12 10:41:09