`

java 中文件outputstream的操作注意

 
阅读更多
public class FileTest {
	public static void main(String[] args) {
		File file = new File("F:\\3.txt");
		if(!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} else {
			System.out.println(file.length());
		}

	}
}

 上面一段代码是很简单的文件创建操作。 

 下面,我们分析下面一段代码。

 

public class FileTest1 {
	public static void main(String[] args) {
		File file = new File("F:\\3.txt");
		System.out.println(file.length());
		OutputStream os;
		try {
			os = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(file.length());
	}
}

 

结果为:  如果在硬盘上存在F:\\3.txt 这个文件, 则上述代码会将3.txt文件的大小(length)清0,相当于格式化。

 而如果在硬盘上不存在这个文件,则会新创建出一个大小为0的 3.txt文件。 

 如果文件存在时,使用上述代码要小心。

 

一般来说,我们在做输出流时, 文件路径是一个空的(或是硬盘上没有)文件,即当做目标文件。

普通的复制文件操作,用输入流将文件读取,将流加载至内存,在输出流中,循环将内存中的流写至目标文件。

 

对于文件内容的修改,我们常常使用字符流的方式,即Reader和Writer模式。

Reader 可以整行读取文件的内容,writer可以将字符串一次性写入目标文件。

 

下面为文件复制的代码:

public static void copy(String oldPath, String newPath) {
		try {
			int byteRead = 0;
			int byteSum = 0;
			File oldFile = new File(oldPath);
			if(oldFile.exists()) {
				FileInputStream is = new FileInputStream(oldFile);
				FileOutputStream os = new FileOutputStream(newPath);
				byte[] bt = new byte[345];
				while((byteRead = is.read(bt)) != -1) {
					byteSum += byteRead;
					System.out.println(byteSum);
					os.write(bt, 0, byteRead);
				}
				is.close();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

下面为文件修改的代码:

private String readFile(String filePath, DBConfigVO dbvo) {
		BufferedReader br = null;
		String line = null;
		StringBuffer buf = new StringBuffer();
		
		try {
			// 根据文件路径创建缓冲输入流
			br = new BufferedReader(new FileReader(filePath));
			// 循环读取文件的每一行, 对需要修改的行进行修改, 放入缓冲对象中
			while((line = br.readLine()) != null) {
				String[] a = new String[2];
				a = line.split(" ");
				
				for(Method m : DBConfigVO.class.getDeclaredMethods()) {
					String mName = m.getName();
					if(mName.startsWith("get")) {
						if(a[0].equals(mName.substring(3).toLowerCase())) {
								buf.append(line.substring(0, line.length() - a[1].length() - 1)).
										append(" ").append(m.invoke(dbvo).toString());
						}
					}
					if(mName.startsWith("is")) {
						if(a[0].equals(mName.substring(2).toLowerCase())) {
							buf.append(line.substring(0, line.length() - a[1].length() - 1)).
									append(" ").append(m.invoke(dbvo).toString());
						}
					}
					
				}
					
				buf.append(System.getProperty("line.separator"));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} finally {
			// 关闭流
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					br = null;
				}
			}
		}
		
		return buf.toString();
	}
	
	/**  
     * 将内容回写到文件中  
     *   
     * @param filePath  
     * @param content  
     */
	private void writeFile(String content, String filePath) {
		BufferedWriter bw = null;
		
		try {
			// 根据文件路径创建缓冲输出流
			bw = new BufferedWriter(new FileWriter(filePath));
			// 将内容写入文件中
			bw.write(content);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					bw = null;
				}
			}
		}
	}

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Thinking in Java简体中文(全)

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    java 面试题 总结

    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。...

    java联想(中文)

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Thinking in Java 中文第四版+习题答案

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    java初学者必看

    1.2.3 Java网络操作系统 1.3 Java的特点 1.4 Java程序类型 1.5 JDK与JRE 1.5.1 Java开发工具包 1.5.2 Java运行环境 1.6 Java技术体系 1.7 Java虚拟机 1.7.1 虚拟机数据类型 1.7.2 Java虚拟机的生命周期 ...

    JAVA基础知识点,J2SE部分内容

    在学习过程中也要和集合一样,首先了解JAVA的整个IO包的结构,然后在具体的类的学习中总结常用通用方法,找到相同的规律减少学习时间和难度。 1. 什么是IO? I:input 输入 通常做读取操作(将不同数据源的数据读入...

    java 编程入门思考

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Java之IO流学习总结

    Java IO流学习总结 ...注意:该对象在实例化时,如果要操作的文件不存在,会自动创建;如果文件存在,写数据未指定位置,会从头开始写,即覆盖原有的内容。 可以用于多线程下载或多个线程同时写数据到文件。

    IO体系.java

    |--ObjectOutputStream/:将java对象的基本数据类型和图形写入到OutputStream。 | |--PipedOutputStream/:可以将管道输出流连接到管道输入流来创建通信管道。 | 用方法connect(PipedInputStream snk) 将此管道...

    Java初学者入门教学

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    通过java操作excel表格的工具类库jxl

     通过java操作excel表格的工具类库  支持Excel 95-2000的所有版本  生成Excel 2000标准格式  支持字体、数字、日期操作  能够修饰单元格属性  支持图像和图表  应该说以上功能已经能够大致满足我们的需要。最...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    JAVA_Thinking in Java

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    jxl创建excel总结,超详细

    要往xls文件里面写入数据的时候需要注意的是第一要新建一个xls文件 OutputStream os=new FileOutputStream("c:\\excel2.xls"); 再建完这个文件的时候再建立工作文件 jxl.write.WritableWorkbook wwb = Workbook....

    java自学之道

    3.5 其他操作文件的方法 4、Java异常处理 4.1 Java异常概念 4.2 异常类型 4.3 Java的内置异常 4.4 Java异常举例 4.5 异常的捕获和处理 4.6 异常抛出 4.6.1 throw语句 4.6.2 throws语句 4.6.3 finally语句 4.7 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

    Think in Java(中文版)chm格式

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 ...

    超级有影响力霸气的Java面试题大全文档

    1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...

    jsr80 java 访问 usb

    这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。 在本文中,将对 jUSB 和 JSR...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用...

Global site tag (gtag.js) - Google Analytics