今天总结一下关于java实现输入输入的总结,首先给自己整理一下文章的思路吧。 首先简单概述一下关于输入输出的概念;其次将java对于输入输出的支持;最后完成一些代码示例:包括文件复制、从控制台向文件写入内容、读取文件内容、读取网络中文件的内容、将网络中文件下载到本地、实现从网络中的上传下载操作
1 IO概述
首先根据自己的理解来解释一下IO,IO顾名思义是输入输出,那么何为输入输出呢?这个肯定有两端才能进行输入输出操作,对于我们一般理解的输入输出而言,大多都是针对内存为参照物,内存只是其中的一端,另一端包括本地的文件文件夹、网络中的磁盘、远端的计算机内存等等。其实进行输入输出就是进行数据移动的过程。何为输入?从远端向内存中传输数据就可以理解为输入;何为输出?从内存向远端传输数据就可以理解为输出。就一个简单的例子:比如说我们复制文件/home/test.txt到/user/home目录下,从本地的一个路径复制到另一个路径的过程。从输入输出的过程来分析:首先需要将文件/home/test.txt输入到内存中,然后从内存向目录/user/home输出,通过先输入在输出的过程完成对文件的复制操作。
简而言之,IO就是数据在传输或者移动的过程中的一个相对顺序。
关于流:可以理解为是数据在传输过程的一种抽象表达形式。
2 Java对IO的支持
(现在将自己能记住的关于IO操作的东西记录下来,方便在以后查看的时候能看到自己的提高~~~~)
首先个人感觉对于输入输出这一块的东西比较多,根据不同的角度可以有很多中分类的方法。比如根据数据的类型可以分为字节型和字符型、根据流的种类可以分为节点流和处理流(或者叫做过滤流,就是对流进行了封装的流,在实际的运用中貌似经常会这样做)
2.1 关于字节型相关的类 2.1.1 输入流
InputStream(){}
FileInputStream(){}
FilterInputStream(){}//到现在为止还没有用过该类
2.1.2 输出流
OutputStream(){}
FileOutputStream(){}
FilterOutputStream(){}//到现在为止也是还没有用过该类
2.2 关于字符型相关的类
2.2.1 输入流
Reader(){};
InputStreamReader(){}; // 该类是字节和字符之间转换的桥梁,并且可以手工设置编码类型
FileInputStreamReader();
FileReader(){};
BufferedReader(){};
2.2.2 输出流
Writer(){}
OutputStreamWriter(){};
FileOutputStreamWriter(){}
FileWriter(){}
PrintWriter(){}
BufferedWriter(){}
需要特别提示的是关于输入类的read方法和输出类的write方法,可以是read字节、字符、字符串(以行为单位)
3 示例代码
3.1 文件复制
public void copyFile(String sourcePath,String destinationPath){
File sourceFile=new File(sourcePath);
File destFile=new File(destinationPath);
if(!sourceFile.exists()){
System.out.println("源文件不存在!");
System.exit(0);
}
if(!destFile.exists()){
try {
destFile.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
FileInputStream fis=new FileInputStream(sourceFile);
byte [] buffer=new byte[100];
int flag=-1;
FileOutputStream fos=new FileOutputStream(destFile);
while((flag=fis.read(buffer))!=-1){
fos.write(buffer);
fos.flush();
}
if(fis!=null){
fis.close();
}
if(fos!=null){
fos.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.2 读取文件中的数据,打印到控制台上
public void readFile(String fileName){
File f=new File(fileName);
try {
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"GB2312"));
System.out.println("-----------Start---------------");
char [] arr=new char[100];
int i=-1;
while((i=br.read(arr,0,100))!=-1){
for(int x=0;x<arr.length;x++){
System.out.print(arr[x]);
}
}
if(br!=null){
br.close();
}
System.out.println("-----------End---------------");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1){
e1.printStackTrace();
}
}
3.3 从网络中读取数据,打印到控制台上
public void readDataFromInternet(String urlPath){
try {
URL url=new URL(urlPath);
BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"GB2312"));
String str=br.readLine();
int count=1;
System.out.println(count+". "+str);
while(str!=null){
str=br.readLine();
count++;
System.out.println(count+". "+str);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.4 从控制台输入数据,输入到指定文件中
public void keyboardToFile(String fileName){
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in,"gb2312"));
PrintWriter pw=new PrintWriter(new File(fileName));
System.out.println("请输入 >");
String readLine=br.readLine();
while(readLine!=null){
pw.write(StringToCharArray(readLine));
pw.println();
pw.flush();
System.out.println("请继续输入 >");
readLine=br.readLine();
if(readLine.equals("bye")){
System.out.println("写入结束!");
System.exit(0);
}
}
if(br!=null){
br.close();
}
if(pw!=null){
pw.close();
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
简单的总结一下, 上边的知识都很浅,没有深入地去研究,再过一段时间能自己动手完成一个小的项目来实践,更加深入的了解和使用关于输入输出.