`
wlh269
  • 浏览: 457907 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

常用IO操作

    博客分类:
  • J2SE
阅读更多
例子:写文件,在文件末尾追加文字并且指定输出文件内容字符编码为utf-8:
备注:只有字符流可以确定编码,因为字符编码是对应字符的,无法对字节流编码,所以我们得找到一个Writer的子类来指定输出字符的编码.
OutputStreamWriter osw=null;
FileOutputStream fos=null;
//文件末尾追加,构造方法第二个参数true来确定
fos = new FileOutputStream(file,true);
  //指定输出文件内容编码为utf-8,构造方法第二个参数true来确定
 OutputStreamWriter osw=new OutputStreamWriter(fos,"utf-8");


有的时候直接调用file.delete();时候,删除文件可能不成功!面对这种情况,首先确保file对象句柄的锁定是否释放,例如某输出流是否关闭。此外jkd1.5之后关闭流释放资源有一些延时,我们最好调用垃圾回收机制,去释放资源!

/*
	 * 删除文件
	 * @param file
	 * @return
	 */
	protected boolean delFile(File file){ 
		boolean result = false;    
	    int tryCount = 0;    
	    while(!result && tryCount++ <10){    
	     System.gc();    
	     result = file.delete();
	     LOG.info("删除文件:"+file.getAbsolutePath()+","+result);	 
	     }    
	    return result;    
   }



判断文件是否为空

/*
	 * 判断文件是否为空
	 * @param sendSMSfile
	 * @return
	 */
	protected boolean NotEmptyFile(File sendSMSfile) {
   		FileReader fr=null;
   		BufferedReader br=null;
   		try {
   			 fr=new FileReader(sendSMSfile);
   			 br=new BufferedReader(fr);
   			if(br.readLine()!=null)
   				return true;
   			
   		} catch (FileNotFoundException e) {
   			e.printStackTrace();
   		} catch (IOException e) {
   			e.printStackTrace();
   		}finally{
   			
   				try {
   					if(br!=null){
					br.close();
   					}
   					if(fr!=null){
   						fr.close();
   	   				 }
				} catch (IOException e) {
					e.printStackTrace();
				}
   			}
   		
   		return false;
   	}





文件末尾追加一行


/*
	 * 文件末尾添加结束标记 
	 * @param file
	 * @param mark
	 * @return
	 */
	protected void appendNewLine(File file,String content){
		FileWriter fw=null;
		try {
			 fw=new FileWriter(file.getPath(),true);
			 //fw.write("\n");
			 fw.write(content);
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try{
			  if(fw!=null){
				  fw.close();
			  }
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
	



读取文件最后一行
 /**
	  * 文件完整传输
	  * @param file
	  * @param charset
	  * @return
	  */
	 private String readLastLine(File file, String charset) {   
		  if (!file.exists() || file.isDirectory() || !file.canRead()) {   
		    return null;   
		  }   
		  RandomAccessFile raf = null;   
		  try {   
		    raf = new RandomAccessFile(file, "r");   
		    long len = raf.length();   
		    if (len == 0L) {   
		      return "";   
		    } else {   
		      long pos = len - 1;   
		      while (pos > 0) {   
		        pos--;   
		        raf.seek(pos);   
		        if (raf.readByte() == '\n') {   
		          break;   
		        }   
		      }   
		      if (pos == 0) {   
		        raf.seek(0);   
		      }   
		      byte[] bytes = new byte[(int) (len - pos)];   
		      raf.read(bytes);   
		      if (charset == null) {   
		        return new String(bytes);   
		      } else {   
		        return new String(bytes, charset);   
		      }   
		    }   
		  } catch (FileNotFoundException e) {   
		  } catch (IOException e) {
			e.printStackTrace();
		} finally {   
		    if (raf != null) {   
		      try {   
		        raf.close();   
		      } catch (Exception e2) {   
		      }   
		    }   
		  }   
		  return null;   
		} 



拷贝文件


package com.wlh.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
	
	static String srcDir="D:\\SOCKET\\server_fa";//全局
	static String descDir="D:\\SOCKET\\ABC";//全局
	public static void main(String[] args) throws IOException {
		
		//copyFile(srcDir,descDir);
		deleteDirectory(new File(srcDir));
	}
	
	
	
	
   /**
    * 拷贝目录
    * @param srcs
    * @param desc
    * @throws IOException
    */
	public static  void copyFile(String srcs,String desc) throws IOException{   
		File srcdir=new File(srcs);
		File descdir=new File(desc);
			if(!descdir.exists()){
				descdir.mkdirs();
			}
			File [] files=srcdir.listFiles();
			for (int i = 0; i < files.length; i++) {
				   if(files[i].isFile()){
				    FileInputStream in=new FileInputStream(files[i]);   
			        File file=new File(desc+File.separator+files[i].getName());   
			        if(!file.exists())   
			            file.createNewFile();   
			        FileOutputStream out=new FileOutputStream(file);   
			        int c;   
			        byte buffer[]=new byte[1024];   
			        while((c=in.read(buffer))!=-1){   
			            for(int k=0;k<c;k++)   
			                out.write(buffer[k]);           
			        } 
			        in.close();   
			        out.close();  
				   }else{
					   copyFile(files[i].getAbsolutePath(),descDir+files[i].getAbsolutePath().substring(srcDir.length()));
				   }
			}
	        	
		
         
    }  

[color=red][b]删除一个目录[/b][/color]
	
	 /**
	 * 递归删除一个目录以及下面的文件
	 */
	public static  boolean deleteDirectory(File path) {   
	    if( path.exists() ) {   
	      File[] files = path.listFiles();   
	      for(int i=0; i<files.length; i++) {   
	         if(files[i].isDirectory()) {   
	           deleteDirectory(files[i]);  
	         }   
	         else {   
	        	 //删除文件
	           files[i].delete();   
	         }   
	      }   
	    }   
	   //删除目录
	    boolean hasdelete=path.delete();
	    if(hasdelete){
	    	System.out.println("删除目录:"+path);
	    	
	    }
		return hasdelete;
	    
	    
	  }   

}



文件末尾追加文字
public class FileAppendTest {
	/**
	 * 利用FileoutStream构造方法的每二个参数实现内容的追加
	 * @param f 文件
	 * @param context 所要追加的内容
	 */
	public static void append01(File f,String context) throws Exception{
		BufferedWriter br = new BufferedWriter(new OutputStreamWriter
					(new FileOutputStream(f,true)));
			br.write(context);
			br.flush();		
			br.close();				
	}	
	/**
	 * 利用FileWriter构造方法中的第二个参数实现内容的追加
	 * @param f 文件
	 * @param context 内容
	 */
	public static void append02(File f,String context)throws Exception{
		FileWriter fw  = new FileWriter(f, true);
			fw.write(context);
			fw.flush();		
			fw.close();				
	}
	/**
	 * 利用RandomAccessFile的seek()方法,
	 * 将写文件指针移至文件末尾,实现内容的追加
	 * @param f  文件
	 * @param context 内容
	 */
	public static void append03(File f,String context)throws Exception{
		RandomAccessFile raf = new RandomAccessFile(f, "rw");
			raf.seek(raf.length());//将写文件指针移至文件末尾
			raf.writeBytes(context);		
			raf.close();	
	}
}

1
0
分享到:
评论
1 楼 jiangli19192 2011-11-02  
相当不错哦

相关推荐

    java中 IO 常用IO操作类继承结构分析

    Java中的IO操作是编程中必不可少的部分,主要用于处理输入和输出数据。本文将深入探讨Java IO中的常用类及其继承结构,帮助读者理解这个复杂但重要的体系。 首先,Java IO分为两个主要部分:字节流(Byte Stream)...

    常用java IO操作以及用jxl读写excel 工具源代码

    Java IO操作是Java编程中非常基础且重要的部分,它提供了对输入输出流的处理,使得程序能够与外部设备(如硬盘、网络、键盘、显示器等)进行数据交换。本工具结合了Java IO操作和JXL库,实现了读取Excel文件并进行...

    Linux文件IO操作

    ### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...

    JAVA IO同步,异步

    其中,signal driven IO 在实际中并不常用,因此这里只讨论剩下的四种IO 模型。 总结 在本文中,我们讨论了基于系统底层通信技术Socket 的JAVA IO同步和异步操作,包括阻塞和非阻塞IO 操作。同步IO 是指应用程序在...

    AB常用IO接线大全.rar

    标题中的“AB常用IO接线大全”指的是Allen Bradley(AB)公司的I/O模块接线的综合指南。Allen Bradley是美国Rockwell Automation旗下的知名品牌,主要生产工业自动化设备,尤其是PLC(可编程逻辑控制器)产品。这个...

    ABB机器人常用IO板大全.docx

    下面将详细介绍一下ABB机器人常用的IO板及其功能。 1. **数字输入板(Digital Input Board)**: 数字输入板用于接收来自外部系统的数字信号,例如限位开关、按钮或传感器的开/关状态。这些信号通常为二进制形式,...

    ABB机器人IO基本操作和接线练习【详解】.docx

    当机器人重启后,默认会显示设定的常用IO信号,无论是在手动还是自动模式下,无需人工干预即可显示。 ##### 2. 设定步骤 - **步骤1**:通过ABB菜单进入**控制面板**,找到**常用IO配置**选项。 - **步骤2**:配置...

    漫谈linux文件IO

    1. **fwrite**:最常用的文件写入接口,在用户进程空间开辟缓冲区,将多次小数据量的写操作合并成一次大的写操作,最终通过 `write` 系统调用执行。 2. **write**:触发用户态到内核态的切换,将数据从 Application ...

    PCI9054实现IO读写操作 PCI9054实现IO读写操作 PCI9054实现IO读写操作

    PCI9054是一款常用的PCI(Peripheral Component Interconnect)接口控制器,主要用于实现系统与扩展设备之间的数据传输。在计算机硬件设计中,理解如何通过PCI9054进行I/O(输入/输出)读写操作至关重要,因为这是...

    IO文件流操作

    Java NIO(New IO)提供了非阻塞的IO操作,通过选择器(Selector)可以同时监听多个通道,提高了IO性能。Java 7引入了NIO.2,引入了Path、Files、Paths等新类,使得文件操作更加简洁。 总结,Java中的IO文件流操作...

    AB全系列常用IO接线大全

    总之,AB全系列常用IO接线大全为技术人员提供了一套详细的接线方法和安全指南,是使用AB系列PLC时不可或缺的参考资料。通过对各个型号I/O模块的理解和正确的接线操作,可以确保整个控制系统的可靠运行。

    draw.io画图工具和一些模板。

    2. **多平台支持**:作为一个Web应用,draw.io可以在任何有浏览器的设备上运行,包括Windows、Mac、Linux等操作系统。 3. **丰富的模板库**:内含大量预设模板,涵盖各种用途,如组织架构图、流程图、概念图、逻辑...

    Java IO commons-io-2.5.jar

    4. 字符集转换:`Charsets` 类提供了对常用字符集的支持,使得在处理编码问题时更加方便。 5. 对象序列化:`SerializationUtils` 提供了序列化和反序列化对象的实用方法,简化了对象的持久化过程。 6. 文件比较:`...

    JAVA_IO操作总括

    Java IO操作总括 在Java编程中,IO(Input/Output)操作是处理数据输入和输出的核心技术。本文将深入探讨Java IO系统的基本概念、主要类库以及它们在实际开发中的应用。 一、Java IO系统概述 Java的IO库提供了一...

    第八次课IO操作二.zip

    通过学习“第八次课IO操作二”,开发者能掌握Java IO的基本原理和常用操作,为实现各种复杂的文件系统交互和数据传输场景打下坚实基础。在实际开发中,熟练运用这些知识可以提高程序的稳定性和效率。

    电脑常用IO芯片F71883FG的Datesheet

    ### 电脑常用IO芯片F71883FG的Datesheet关键知识点解析 #### 一、概述 在电脑硬件领域,尤其是主板设计中,IO控制芯片扮演着至关重要的角色。本文将详细介绍F71883FG这款电脑主板常用IO控制芯片的相关知识点,包括...

    java 文件操作及IO流

    Java 文件操作与IO流是Java编程中的核心概念,主要用于数据的读取、写入和传输。在Java中,文件操作通常涉及到`java.io`包下的类,如`File`、`FileOutputStream`、`OutputStreamWriter`和`BufferedWriter`等。下面将...

    C++ IO 操作格式

    C++的IO操作是编程中不可或缺的一部分,它允许程序与用户进行数据交互。在C++中,IO操作主要涉及标准库中的`iostream`和相关的头文件,如`iomanip`。`iomanip`头文件提供了操纵符(manipulator),这是一种特殊类型...

    io0007-find_progess

    总结来说,“io0007-find_progress”项目是针对IO操作和HTTP通信的实用工具库,它通过一系列精心设计的函数和类,简化了开发过程中涉及文件和网络交互的部分,提高了代码的效率和易用性。对于处理大量文件操作或网络...

Global site tag (gtag.js) - Google Analytics