zoukankan      html  css  js  c++  java
  • java之IO整理(上)

    /*//创建一个新文件
    	public static void main(String[] args) {
    		File file=new File("D:\hello.txt");
    		try {
    			file.createNewFile();
    		} catch (IOException e) {
    			
    			e.printStackTrace();
    		}
    	}*/
    	
    	/*//File类的两个常量  
    	public static void main(String[] args) {
    		System.out.println(File.separator);//结果: 
    		System.out.println(File.pathSeparator);//结果: :
    	}*/
    	
    	/*//删除一个文件
    	public static void main(String[] args) {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		if(file.exists()){
    			file.delete();
    		}else {
    			System.out.println("文件不存在!");
    		}
    	}*/
    	
    	/*//创建一个文件夹
    	public static void main(String[] args) {
    		String fileName="D:"+File.separator+"hello";
    		File file=new File(fileName);
    		file.mkdirs();
    	}*/
    	
    	/*//使用listFiles列出指定目录的全部文件
    	 //* listFiles输出的是完整路径
    	public static void main(String[] args) {
    		String fileName="D:"+File.separator;
    		File file=new File(fileName);
    		File[] str=file.listFiles();
    		for(int i=0;i<str.length;i++){
    			System.out.println(str[i]);
    		}
    	}*/
    	
    	/*使用isDirectory判断一个指定的路径是否为目录*/
    	/*public static void main(String[] args) {
    		String fileName="D:"+File.separator;
    		File file=new File(fileName);
    		if(file.isDirectory())
    			System.out.println("yes");
    		else {
    			System.out.println("no");
    		}
    	}*/
    	
    	/*列出指定目录的全部内容*/
    	/*public static void main(String[] args) {
    		String fileName="D:"+File.separator;
    		File file=new File(fileName);
    		print(file);
    	}
    	public static void print(File f){
    		if(f!=null){
    			if(f.isDirectory()){
    				File[] fileArray=f.listFiles();
    				if(fileArray!=null){
    					for(int i=0;i<fileArray.length;i++){
    						print(fileArray[i]);//递归调用
    					}
    				}
    			}else {
    				System.out.println(f);
    			}
    		}
    	}*/
    	
    	/*使用RandomAccessFile写入文件
    	public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
    		randomAccessFile.writeBytes("1234567890");
    		randomAccessFile.writeInt(42);
    		randomAccessFile.writeBoolean(true);
    		randomAccessFile.writeChar(88);
    		randomAccessFile.writeDouble(12.678);
    		randomAccessFile.writeFloat(23.5f);
    		randomAccessFile.close();		
    	}//如果你此时打开hello。txt查看的话,会发现那是乱码。
    */	
    	/*字节流
    	 * 向文件中写入字符串
    	public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		OutputStream outputStream=new FileOutputStream(file);
    		String string="Hello";
    		byte[] bs=string.getBytes();
    		outputStream.write(bs);
    		outputStream.close();
    	}*/
    	
    	/**
    	 * 字节流
    	 * 向文件中一个字节一个字节的写入字符串
    	 * @throws IOException 
    	 * *//*
    	public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		OutputStream outputStream=new FileOutputStream(file);
    		String string="Hello GG";
    		byte[] bs=string.getBytes();
    		for(int i=0;i<bs.length;i++){
    			outputStream.write(bs[i]);
    		}		
    		outputStream.close();
    	}*/
    	
    	/**
    	 * 字节流
    	 * 向文件中追加新内容:
    	 * @throws IOException 
    	 * */
    	/*public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		OutputStream outputStream=new FileOutputStream(file,true);
    		String string="Hello MM";
    		//String str="
    Rollen"; 可以换行		
    		byte[] bs=string.getBytes();
    		for(int i=0;i<bs.length;i++){
    			outputStream.write(bs[i]);
    		}		
    		outputStream.close();
    	}*/
    	
    	/**
    	 * 字节流
    	 * 读文件内容
    	 * @throws IOException 
    	 * */
    	/*public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		InputStream inputStream=new FileInputStream(file);
    		//byte[] bs=new byte[1024];//预先申请了一个指定大小的空间
    		byte[] bs=new byte[(int) file.length()];
    		inputStream.read(bs);
    		System.out.println("文件长度为:"+file.length());
    		inputStream.close();
    		System.out.println(new String(bs));
    	}*/
    	
    	/**
    	 * 字节流
    	 *读文件
    	 * @throws IOException 
    	 * */
    	/*public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		InputStream inputStream=new FileInputStream(file);
    		byte[] bs=new byte[1024];
    		int count=0;
    		int temp=0;
    		while((temp=inputStream.read())!=(-1)){//当读到文件末尾的时候会返回-1.正常情况下是不会返回-1的
    			bs[count++]=(byte) temp;
    		}
    		inputStream.close();
    		System.out.println(new String(bs));
    	}*/
    	
    	/**
    	 * 字符流
    	 * 写入数据
    	 * @throws IOException 
    	 * */
    	/*public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		Writer out=new FileWriter(file);
    		String string="朋友";
    		out.write(string);
    		out.close();		
    	}*/
    	
    	/**
    	 * 字符流
    	 * 从文件中读出内容
    	 * @throws IOException 
    	 *采用循环读取的方式,因为我们有时候不知道文件到底有多大。
    	 * */
    	/*public static void main(String[] args) throws IOException {
    		String fileName="D:"+File.separator+"hello.txt";
    		File file=new File(fileName);
    		char[] ch=new char[100];
    		Reader reader=new FileReader(file);
    		int temp=0;
    		int count=0;
    		while((temp=reader.read())!=(-1)){
    			ch[count++]=(char) temp;			
    		}
    		reader.close();
    		System.out.println(new String(ch, 0, count));
    	}*/

    /**
    * 将字节输出流转化为字符输出流
    * @throws IOException
    * */
    /*public static void main(String[] args) throws IOException {
    String fileName="D:"+File.separator+"hello.txt";
    File file=new File(fileName);
    Writer out=new OutputStreamWriter(new FileOutputStream(file));
    out.write("MM");
    out.close();
    }*/

    /**
    * 将字节输入流变为字符输入流
    * @throws IOException
    * */
    /*public static void main(String[] args) throws IOException {
    String fileName="D:"+File.separator+"hello.txt";
    File file=new File(fileName);
    Reader reader=new InputStreamReader(new FileInputStream(file));
    char[] cs=new char[100];
    int len=reader.read(cs);
    System.out.println(new String(cs, 0, len));
    reader.close();
    }*/

    /**
    * 使用内容操作流将一个大写字母转化为小写字母
    * @throws IOException
    * 内容操作流一般用来生成一些临时信息的,这样可以避免删除的麻烦。
    * */
    /*public static void main(String[] args) throws IOException {
    String str="ADFGHJKLUYTG";
    ByteArrayInputStream inputStream=new ByteArrayInputStream(str.getBytes());
    ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
    int temp=0;
    while((temp=inputStream.read())!=(-1)){
    char ch=(char) temp;
    outputStream.write(Character.toLowerCase(ch));
    }
    String outStr= outputStream.toString();
    inputStream.close();
    outputStream.close();
    System.out.println(outStr);
    }*/

    1、字节流和字符流的区别:

    字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候,是会用到缓冲区的,是通过缓冲区来操作文件的。

    使用字节流好还是字符流好呢?

     答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

    2、文件的复制:

    方法一:DOS下就有一个文件复制功能

    方法二:用程序

    /**
    	 * 文件的复制
    	 * @throws IOException 
    	 * 思路:从一个文件中读取内容,边读边写入另一个文件。
    	 * */
    	public static void main(String[] args) throws IOException {
    		String helloFileName="D:"+File.separator+"hello.txt";
    		String rollenFileName="D:"+File.separator+"rollen.txt";
    		File file1=new File(helloFileName);
    		File file2=new File(rollenFileName);
    		if(!file1.exists()){
    			System.out.println("被复制的文件不存在!");
    			System.out.println(1);
    		}
    		InputStream inputStream=new FileInputStream(file1);
    		OutputStream outputStream=new FileOutputStream(file2);
    		if(inputStream!=null&&outputStream!=null){
    			int temp=0;
    			while((temp=inputStream.read())!=(-1)){
    				outputStream.write(temp);
    			}
    		}
    		inputStream.close();
    		outputStream.close();
    	}
    

    3、管道流

    管道流主要用以进行两个线程之间的通信。

    PipedOutputStream 管道输出流

    PipedInputStream 管道输入流

    /*消息发送类*/
    public class Send implements Runnable{
    	private PipedOutputStream out=null;
    	public Send() {
    		out=new PipedOutputStream();
    	}
    	public PipedOutputStream getOut(){
    		return this.out;
    	}
    	@Override
    	public void run() {
    		String message="hello MM";
    		try {
    			out.write(message.getBytes());
    		} catch (IOException e) {			
    			e.printStackTrace();
    		}
    		try {
    			out.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    /*接受消息类*/
    public class Recive implements Runnable{
    	private PipedInputStream input=null;
    	public Recive() {
    		input=new PipedInputStream();
    	}
    	public PipedInputStream getInput(){
    		return this.input;
    	}
    	@Override
    	public void run() {
    		byte[] bs=new byte[1000];
    		int len=0;
    		try {
    			len=this.input.read(bs);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			input.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		System.out.println("接收的内容是:"+(new String(bs, 0, len)));
    	}
    
    }
    
    
    /*测试类*/
    public static void main(String[] args) {
    	Send send=new Send();
    	Recive recive=new Recive();
    	try {
    		send.getOut().connect(recive.getInput());//管道连接
    	} catch (IOException e) {		
    		e.printStackTrace();
    	}
    	new Thread(send).start();
    	new Thread(recive).start();
    }
    }

    4、打印流

    /* 使用PrintStream进行输出*/
    	/*public static void main(String[] args) throws IOException {
    		PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
    			printStream.print(true);
    			printStream.print("GG");
    			printStream.close();
    	}*/
    	
    	/*使用PrintStream进行输出
    	 * 并进行格式化*/
    	/*public static void main(String[] args) throws IOException {
    		PrintStream printStream=new PrintStream(new FileOutputStream(new File("D:"+File.separator+"hello.txt")));
    		String name="GG";
    		int age=26;
    		printStream.printf("姓名:%s;年龄:%d!",name,age);
    		printStream.close();
    	}*/
    	
    	/*使用OutputStream向屏幕上输出内容*/
    	public static void main(String[] args) {
    		OutputStream out=System.out;
    		try {
    			out.write("MM".getBytes());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		try {
    			out.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    

      

  • 相关阅读:
    YTU 2802: 判断字符串是否为回文
    YTU 2392: 求各位数字之和
    YTU 2391: 求素数
    HDU 2064:汉诺塔III
    HDU 2187:悼念512汶川大地震遇难同胞——老人是真饿了
    HDU 2036:改革春风吹满地
    HDU 1081:To The Max
    HDU 1257:最少拦截系统
    YTU 2425: C语言习题 输出月份
    YTU 2420: C语言习题 不等长字符串排序
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6994728.html
Copyright © 2011-2022 走看看