现在的位置: 首页 > 综合 > 正文

Summary of I/O

2018年04月27日 ⁄ 综合 ⁄ 共 3886字 ⁄ 字号 评论关闭

        今天总结一下关于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();
		}
		
		
	}

        简单的总结一下, 上边的知识都很浅,没有深入地去研究,再过一段时间能自己动手完成一个小的项目来实践,更加深入的了解和使用关于输入输出.

【上篇】
【下篇】

抱歉!评论已关闭.