今天总结一下关于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(); } }
简单的总结一下, 上边的知识都很浅,没有深入地去研究,再过一段时间能自己动手完成一个小的项目来实践,更加深入的了解和使用关于输入输出.