JAVA输入/输出流程序例题(文件和目录字节流字符流)

Posted zhangyufeng0126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA输入/输出流程序例题(文件和目录字节流字符流)相关的知识,希望对你有一定的参考价值。

一.文件和目录

1.显示文件的基本信息。

2.显示目录的基本信息。

3.在指定目录下创建单个文件。

4.指定目录下创建多个临时文件。

二、字节流

1.生成ZIP压缩文件

2.解压缩zip文件

3.生成Excel文件

4.读取excel文件

5.生成PDF文件

6.读取PDF文件中的内容

7.利用poi读取Word文件中的内容。

三、字符流

1.追加文件内容

2.读取jar包内容

3文件的加密/解密操作

JAVA加包+++右键项目+BuildPath+Add External Achievees.......


一.文件和目录

1.显示文件的基本信息

package outputintput;

import java.io.File;

public class FileDemo01 {

	public static void main(String[] args) {
		File file = new File("D:\\\\temp\\\\keytoolcmd.txt");				// 根据指定的路径创建一个File对象
		System.out.println("文件名为:" + file.getName());			// 获取该File对象的名字
		System.out.println("绝对路径为:" + file.getAbsolutePath());	// 获取该File对象的绝对路径
		System.out.println("路径为:" + file.getPath());				// 获取该File对象的相对路径
		System.out.println("所属磁盘目录为:" + file.getParent());	//获取该File对象的目录
		if (!file.exists()) {
			file.mkdir();
		}
		System.out.println("此路径名表示的文件是一个目录吗?:" + file.isDirectory());// 判断该File对象是不是目录
		System.out.println("它是处于可读状态吗?:" + file.canRead());		// 判断该File对象是否可读
		System.out.println("它是处于可写状态吗?" + file.canWrite());			// 判断该File对象是否可写
		System.out.println("该文件长度为:" + file.length() + "字节");		// 获取该File对象中的字符长度
		System.out.println("此文件最后修改的时间为:" + file.lastModified());// 获取该File对象最后修改时间
	}
}


2.显示目录的基本信息。

package outputintput;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo02 {

	static class MyFilenameFilter implements FilenameFilter {
		private String sf = ""; 					// 定义文件的后缀名
		public MyFilenameFilter(String surfix) {		// 用构造方法为sf变量赋值
			this.sf = surfix;
		}
		public boolean accept(File dir, String name) {	// 重写FilenameFilter接口中的accept方法,判断指定的文件是否在指定的目录中
			if (new File(dir, name).isFile()) {			// 如果当前的File对象是一个文件,则返回它是否以指定的后缀结束,是返回true
				return name.endsWith(sf);
			} else {
				// 如果是文件夹,则直接返回true
				return true;
			}
		}
	}
	public static void getAllFiles(String dirName) {		// 列出指定目录下所有文件和子目录的路径
		// 如果dir不以文件分隔符结尾,自动添加文件分隔符。
		if (!dirName.endsWith(File.separator)) {
			dirName = dirName + File.separator;
		}
		File dirFile = new File(dirName);
		// 如果dir对应的文件不存在,或者不是一个文件夹,则退出
		if (!dirFile.exists() || (!dirFile.isDirectory())) {
			System.out.println("失败!找不到指定的目录:" + dirName);
			return;
		}
		// 列出源文件夹下所有文件(包括子目录)
		File[] fileArray = dirFile.listFiles();
		for (int i = 0; i < fileArray.length; i++) {
			if (fileArray[i].isFile()) {
				System.out.print(fileArray[i].getAbsolutePath() + "      ");
			} else if (fileArray[i].isDirectory()) {
				System.out.println(fileArray[i].getAbsolutePath() + "      ");
				FileDemo02.getAllFiles(fileArray[i].getAbsolutePath());
			}
			if ((i + 1) % 2 == 0)
				System.out.println();
		}
	}
	public static void getFilesByFilter(FilenameFilter filter,// 获取在指定目录下符合指定后缀文件名的所有文件
			String dir_Path) {
		if (!dir_Path.endsWith(File.separator)) {// 如果目录路径不是以文件分隔符结尾则自动添加文件分隔符。
			dir_Path = dir_Path + File.separator;
		}
		File dir_File = new File(dir_Path);
		if (!dir_File.exists() || (!dir_File.isDirectory())) {// 如果指定的目录不存在或不是一个目录则返回
			System.out.println("失败!找不到指定目录:" + dir_Path);
			return;
		}
		// 列出指定目录下的所有符合过滤器条件的文件(包括子目录)
		File[] fileArray = dir_File.listFiles(filter);
		for (int i = 0; i < fileArray.length; i++) {
			if (fileArray[i].isFile()) {
				System.out.println(fileArray[i].getAbsolutePath() + " 是文件!");
			} else if (fileArray[i].isDirectory()) {
				System.out.println(fileArray[i].getAbsolutePath() + " 是目录!");
				FileDemo02.getFilesByFilter(filter, fileArray[i]
						.getAbsolutePath());
			}
		}
	}
	public static void main(String[] args) {
		String dir = "D:\\\\temp";
		System.out.println((dir + "目录下的内容: "));
		FileDemo02.getAllFiles(dir);
		System.out.println();
		System.out.println("符合过滤器条件的文件如下:");
		// 新建一个文件名过滤器。参数为".txt"
		FilenameFilter myFilenameFilter = new FileDemo02.MyFilenameFilter(
				".txt");
		FileDemo02.getFilesByFilter(myFilenameFilter, dir);
	}

}


3.在指定目录下创建单个文件

package outputintput;

import java.io.File;
import java.io.IOException;

public class FileDemo03 {

	// 此方法的主要作用是判断创建文件是否成功,如果成功则返回true否则返回false
		public static boolean createFile(String destFileName) {
			File file = new File(destFileName);	// 根据指定的文件名创建File对象
			if (file.exists()) {					// 判断该文件是否存在
				System.out.println("创建单个文件" + destFileName + "失败,目标文件已存在!");
				return false;				// 如果存在,则不需创建则返回fasle
			}
			if (destFileName.endsWith(File.separator)) {// 如果传入的文件名是以文件分隔符结尾的,则说明此File对象是个目录而不是文件
				System.out.println("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
				return false;// 因为不是文件所以不可能创建成功,则返回false
			}
			// 判断目标文件所在的目录是否存在
			if (!file.getParentFile().exists()) {
				// 如果目标文件所在的文件夹不存在,则创建父文件夹
				System.out.println("创建" + file.getName() + "所在目录不存在,正在创建!");
				if (!file.getParentFile().mkdirs()) {// 判断父文件夹是否存在,如果存在则表示创建成功否则不成功
					System.out.println("创建目标文件所在的目录失败!");
					return false;
				}
			}
			// 创建目标文件
			try {
				if (file.createNewFile()) {// 调用createNewFile方法,判断创建指定文件是否成功
					System.out.println("创建单个文件" + destFileName + "成功!");
					return true;
				} else {
					System.out.println("创建单个文件" + destFileName + "失败!");
					return false;
				}
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("创建文件" + destFileName + "失败!" + e.getMessage());
				return false;
			}
		}
		public static void main(String[] args) {
			// 创建目录
			String dirName = "D:/temp/aa";
			// 创建文件
			String fileName = dirName + "/bb/ccFile.txt";
			FileDemo03.createFile(fileName);
		}

}

4.指定目录下创建多个临时文件。

package outputintput;

import java.io.File;
import java.io.IOException;

public class FileDemo04 {

	public static boolean createDirectory(String destDirName) {// 判断目录是否创建成功,成功则返回true,否则返回false
		File dir = new File(destDirName);// 创建一个File对象
		if (dir.exists()) {// 判断该目录是否存在,存在则返回false
			return false;
		}
		if (!destDirName.endsWith(File.separator)) {// 为了方便获得其目录下的文件的路径,如果该目录路径不是文件分隔符结尾的,则给其加上文件分隔符
			destDirName = destDirName + File.separator;
		}
		// 创建目标目录
		if (dir.mkdirs()) {
			System.out.println("指定目录不存在,创建目录" + destDirName + "成功!");
			return true;
		} else {
			System.out.println("创建目录" + destDirName + "失败!");
			return false;
		}
	}
	public static String createFiles(String fileName, String suffix,
			String dirName) {// 根据传入的文件名的前缀和扩展名在指定的目录下创建文件
		File tempFile = null;
		if (dirName == null) {
			try {
				// 在默认文件夹下创建临时文件
				tempFile = File.createTempFile(fileName, suffix);
				// 返回临时文件的路径
				return tempFile.getCanonicalPath();
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("创建临时文件失败!" + e.getMessage());
				return null;
			}
		} else {
			File dir = new File(dirName);
			// 如果临时文件所在目录不存在,首先创建目录
			if (!dir.exists()) {
				if (FileDemo04.createDirectory(dirName)) {
					System.out.println("创建临时文件失败,不能创建临时文件所在的目录!");
					return null;
				}
			}
			try {
				// 在指定目录下创建指定的文件
				tempFile = File.createTempFile(fileName, suffix, dir);
				return tempFile.getCanonicalPath();
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("创建临时文件失败!" + e.getMessage());
				return null;
			}
		}
	}
	public static void main(String[] args) {
		String[] surfix = { ".txt", ".jpg", ".doc", ".excel", ".java", ".html",null,"" };
		// 创建目录
		String dirName = "D:\\\\temp\\\\temp1";
		FileDemo04.createDirectory(dirName);
		// 创建临时文件
		String fileName = "temp";
		for (int i = 0; i < surfix.length; i++) {
			System.out.println("成功创建了临时文件: "
					+ FileDemo04.createFiles(fileName, surfix[i], dirName));
		}
	}
}

二、字节流


1.生成ZIP压缩文件

package outputintput;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class StreamDemo11 {

	// 压缩文件或者目录,其中:dirPath:压缩的根目录,srcName:
	// dirPath目录下的所有文件包名子目录,targetName:压缩后的zip文件
	public static void compressAllZip(String dirPath, String srcName,
			String targetName) {
		if (dirPath == null) {// 判断根目录是否存在
			System.out.println("压缩失败" + dirPath + "目录不存在");
			return;
		}
		File baseDir = new File(dirPath);// 判断dirPath是不是目录
		if (!baseDir.exists() || (!baseDir.isDirectory())) {
			System.out.println("压缩失败" + dirPath + "目录不存在");
			return;
		}
		String basicRootDir = baseDir.getAbsolutePath();
		File targetFile = new File(targetName);// 创建zip文件
		try {
			// 创建一个zip输出流来压缩数据并写入到zip文件
			ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
					targetFile));
			if (srcName.equals("*")) {
				// 将baseDir目录下的所有文件压缩到ZIP
				StreamDemo11.compressDirToZip(basicRootDir, baseDir, out);
			} else {
				File file = new File(baseDir, srcName);
				if (file.isFile()) {
					StreamDemo11.compressFileToZip(basicRootDir, file, out);
				} else {
					StreamDemo11.compressDirToZip(basicRootDir, file, out);
				}
			}
			out.close();
			System.out.println("文件压缩成功,压缩包的文件名为:" + targetName);
		} catch (IOException e) {
			System.out.println("压缩失败:" + e);
			e.printStackTrace();
		}
	}
	// 利用ZipOutputStream对目录的压缩
	private static void compressDirToZip(String basicRootDir, File dir,
			ZipOutputStream out) {
		if (dir.isDirectory()) {
			// 列出dir目录下所有文件
			File[] files = dir.listFiles();
			// 如果是空文件夹
			if (files.length == 0) {
				ZipEntry entry = new ZipEntry(getFileName(basicRootDir, dir));
				// 存储目录信息
				try {
					out.putNextEntry(entry);
					out.closeEntry();
				} catch (IOException e) {
					e.printStackTrace();
				}
				return;
			}
			for (int i = 0; i < files.length; i++) {
				if (files[i].isFile()) {
					// 如果是文件,调用compressFileToZip方法
					StreamDemo11
							.compressFileToZip(basicRootDir, files[i], out);
				} else {
					// 如果是目录,递归调用
					StreamDemo11.compressDirToZip(basicRootDir, files[i], out);
				}
			}
		}
	}
	// 利用ZipOutputStream对文件的压缩
	private static void compressFileToZip(String basicRootDir, File file,
			ZipOutputStream out) {
		FileInputStream in = null;
		ZipEntry entry = null;
		// 创建复制缓冲区
		byte[] buffer = new byte[4096];
		int bytes_read;
		if (file.isFile()) {
			try {
				in = new FileInputStream(file); // 创建一个文件输入流
				// 根据压缩文件的名字构造一个ZipEntry对象,此类表示zip包中的文件条目
				entry = new ZipEntry(getFileName(basicRootDir, file));
				out.putNextEntry(entry); // 存储项信息到压缩文件
				// 将文件的内容通过字节数组复制到压缩文件中
				while ((bytes_read = in.read(buffer)) != -1) {
					out.write(buffer, 0, bytes_read);
				}
				out.closeEntry();
				in.close();
				System.out
						.println("添加文件" + file.getAbsolutePath() + "到ZIP文件中!");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	// 获取等待压缩的文件的文件名,例如:D:\\tu\\1.jpg获取的文件名为tu\\1.jpg
	private static String getFileName(String basicRootDir, File file) {
		if (!basicRootDir.endsWith(File.separator)) {
			basicRootDir += File.separator;
		}
		String filePath = file.getAbsolutePath();
		// 对于目录,必须在entry名字后面加上"/",表示它将以目录项存储。
		if (file.isDirectory()) {
			filePath += "/";
		}
		int index = filePath.indexOf(basicRootDir);
		return filePath.substring(index + basicRootDir.length());
	}
	public static void main(String[] args) {
		// 压缩D盘下的tu目录,压缩后的文件是D:/图片.zip
		String dirPath = "D:/";
		String srcName = "tu/";
		String zipFileName = "D:/test/图片.zip";
		StreamDemo11.compressAllZip(dirPath, srcName, zipFileName);
	}
}


2.解压缩zip文件

package outputintput;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class StreamDemo12 {

	public static void main(String[] args) {
		// 将刚创建的图片.zip文件解压缩到D盘的temp目录下
		String fileName = "D:/test";
		String zipName = "D:/test/图片.zip";
		StreamDemo12.upzipFile(zipName, fileName);
	}
	// 将指定的zip文件解压到targetDirName目录下,其中:zipName:zip包的文件名,targetDirName:需解压到的目录
	public static void upzipFile(String zipName, String targetDirName) {
		if (!targetDirName.endsWith(File.separator)) {
			targetDirName += File.separator;
		}
		try {
			// 根据zip文件创建ZipFile对象,此类的作用是从zip文件读取条目。
			ZipFile zipFile = new ZipFile(zipName);
			ZipEntry zn = null;
			String entryName = null;
			String targetFileName = null;
			byte[] buffer = new byte[4096];
			int bytes_read;
			// 获取ZIP文件里所有的文件条目的名字
			Enumeration entrys = zipFile.entries();
			// 循环遍历所有的文件条目的名字
			while (entrys.hasMoreElements()) {
				zn = (ZipEntry) entrys.nextElement();
				// 获得每一条文件的名字
				entryName = zn.getName();
				targetFileName = targetDirName + entryName;
				if (zn.isDirectory()) {
					// 如果zn是一个目录,则创建目录
					new File(targetFileName).mkdirs();
					continue;
				} else {
					// 如果zn是一个文件,则创建父目录
					new File(targetFileName).getParentFile().mkdirs();
				}
				// 否则创建文件
				File targetFile = new File(targetFileName);
				System.out.println("正在创建文件:" + targetFile.getAbsolutePath());
				// 打开文件输出流
				FileOutputStream os = new FileOutputStream(targetFile);
				// 从ZipFile对象中打开entry的输入流
				InputStream is = zipFile.getInputStream(zn);
				while ((bytes_read = is.read(buffer)) != -1) {
					os.write(buffer, 0, bytes_read);
				}
				// 关闭流
				os.close();
				is.close();
			}
			System.out.println("解压缩"+zipName+"成功!");
		} catch (IOException err) {
			System.err.println("解压缩"+zipName+"失败: " + err);
		}
	}
}


3.生成Excel文件

package outputintput;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;

public class StreamDemo13 {

	// 新建一个Excel文件,里面添加5行5列的内容,另外添加一个合并2行5列的大单元格以及一个合并2行1列的5个合并单元格。
	public void createExcel(String fileName) {
		File file = new File(fileName);// 创建excel文件对象
		FileOutputStream fOut = null;
		try {
			// 创建一个新的HSSFWorkbook对象
			HSSFWorkbook workbook = new HSSFWorkbook();
			// 创建一个Excel的工作表,可以指定工作表的名字
			HSSFSheet sheet = workbook.createSheet("myFirstExcel");
			// 创建字体,红色、粗体
			HSSFFont font = workbook.createFont();
			font.setColor(HSSFFont.COLOR_RED);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			HSSFFont font1 = workbook.createFont();
			// 创建字体,黑色、非粗体
			font1.setColor(HSSFFont.COLOR_NORMAL);
			font1.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
			// 创建单元格的格式,如居中、左对齐等
			HSSFCellStyle cellStyle = workbook.createCellStyle();
			cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平方向上居中对齐
			// 垂直方向上居中对齐
			cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			cellStyle.setFont(font); // 设置字体
			HSSFCellStyle cellStyle1 = workbook.createCellStyle();
			cellStyle1.setAlignment(HSSFCellStyle.ALIGN_LEFT);
			cellStyle1.setFont(font1);
			// 下面将建立一个4行3列的表。第一行为表头。
			int rowNum = 0;// 行标
			int colNum = 0;// 列标
			// 建立表头信息
			HSSFRow row = sheet.createRow((short) rowNum); // 在索引0的位置创建行
			HSSFCell cell = null; // 单元格
			for (colNum = 0; colNum < 5; colNum++) {
				// 在当前行的colNum列上创建单元格
				cell = row.createCell((short) colNum);

				// 定义单元格为字符类型,也可以指定为日期类型、数字类型
				cell.setCellType(HSSFCell.CELL_TYPE_STRING);
				// 定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
				cell.setEncoding(HSSFCell.ENCODING_UTF_16);
				cell.setCellStyle(cellStyle); // 为单元格设置格式
				cell.setCellValue("表头-第" + (colNum + 1) + "列"); // 添加内容至单元格
			}
			rowNum++;
			for (; rowNum < 5; rowNum++) {
				// 新建第rowNum行
				row = sheet.createRow((short) rowNum);
				for (colNum = 0; colNum < 5; colNum++) {
					// 在当前行的colNum位置创建单元格
					cell = row.createCell((short) colNum);
					cell.setEncoding(HSSFCell.ENCODING_UTF_16);
					cell.setCellStyle(cellStyle1);
					cell.setCellValue("表体-第" + rowNum + "行第" + (colNum + 1)
							+ "列");
				}
			}

			// 合并单元格
			// 先创建2行5列的单元格,然后将这些单元格合并为2个大单元格
			rowNum = 5;
			for (; rowNum < 9; rowNum++) {
				row = sheet.createRow((short) rowNum);
				for (colNum = 0; colNum < 5; colNum++) {
					// 在当前行的colNum位置创建单元格
					cell = row.createCell((short) colNum);
				}
			}
			// 建立第一个大单元格,高度为2,宽度为2
			rowNum = 5;
			colNum = 0;
			Region region = new Region(rowNum, (short) colNum, (rowNum + 1),
					(short) (colNum + 4));
			sheet.addMergedRegion(region);
			// 获得第一个大单元格
			cell = sheet.getRow(rowNum).getCell((short) colNum);
			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
			cell.setCellStyle(cellStyle);
			cell.setCellValue("合并行单元格");

			// 建立第二个大单元格,高度为2,宽度为3
			rowNum = 7;
			for (colNum = 0; colNum < 5; colNum++) {
				region = new Region(rowNum, (short) colNum, (rowNum + 1),
						(short) (colNum));
				sheet.addMergedRegion(region);
				// 获得第二个大单元格
				cell = sheet.getRow(rowNum).getCell((short) colNum);
				cell.setEncoding(HSSFCell.ENCODING_UTF_16);
				cell.setCellStyle(cellStyle);
				cell.setCellValue("合并列单元格");
			}
			// 新建一输出文件流
			fOut = new FileOutputStream(file);
			// 将创建的内容写到指定的Excel文件中
			workbook.write(fOut);
			fOut.flush();
			fOut.close();// 操作结束,关闭文件

			System.out.println("Excel文件创建成功!\\nExcel文件的存放路径为:"
					+ file.getAbsolutePath());
		} catch (Exception e) {
			System.out.println("Excel文件" + file.getAbsolutePath()
					+ "创建失败\\n其原因为:" + e);
		} finally {
			if (fOut != null) {
				try {
					fOut.close();
				} catch (IOException e1) {
				}
			}
		}
	}

	public static void main(String[] args) throws Exception {
		StreamDemo13 excel = new StreamDemo13();
		String fileName = "D:/temp/new.xls";
		excel.createExcel(fileName);
	}
}


4.读取excel文件

package outputintput;

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

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class StreamDemo14 {

	/** 读Excel文件内容 */
	public void showExcel(String excelName) {
		File file = new File(excelName);
		FileInputStream in = null;
		try {
			// 创建对Excel工作簿文件的引用
			in = new FileInputStream(file);
			HSSFWorkbook hwb = new HSSFWorkbook(in);
			HSSFSheet sheet = hwb.getSheet("myFirstExcel");// 根据指定的名字来引用此Excel中的有效工作表
			// 读取Excel 工作表的数据
			System.out.println("下面是Excel文件" + file.getAbsolutePath() + "的内容:");
			HSSFRow row = null;
			HSSFCell cell = null;
			int rowNum = 0; 	// 行标
			int colNum = 0; 	// 列标
			for (; rowNum < 9; rowNum++) {
				// 获取第rowNum行
				row = sheet.getRow((short) rowNum);
				for (colNum = 0; colNum < 5; colNum++) {
					cell = row.getCell((short) colNum);// 根据当前行的位置来创建一个单元格对象
					System.out.print(cell.getStringCellValue() + "\\t");// 获取当前单元格中的内容
				}
				System.out.println(); // 换行
			}
			in.close();
		} catch (Exception e) {
			System.out
					.println("读取Excel文件" + file.getAbsolutePath() + "失败:" + e);
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e1) {
				}
			}
		}
	}
	public static void main(String[] args) {
		StreamDemo14 excel = new StreamDemo14();
		String excelName = "D:/temp/new.xls";
		excel.showExcel(excelName);
	}

}


5.生成PDF文件

package outputintput;

import java.awt.Color;
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class StreamDemo15 {
	// 生成PDF文件中的内容
	public void creatPDF(String fileName) {
		File file = new File(fileName);
		FileOutputStream out = null;
		try {
			Document document = new Document(PageSize.A4, 50, 50, 50, 50);// 实例化文档对象
			out = new FileOutputStream(file);
			PdfWriter writer = PdfWriter.getInstance(document, out);// 创建写入器
			document.open();// 打开文档准备写入内容
			// 设置可以在PDF中输入汉字的字体
			BaseFont bfChinese = BaseFont.createFont(
					"C:\\\\WINDOWS\\\\Fonts\\\\SIMHEI.TTF", BaseFont.IDENTITY_H,
					BaseFont.EMBEDDED);
			Font font = new Font(bfChinese, 16, Font.BOLD);
			font.setColor(0, 0, 255);
			Paragraph paragraph1 = new Paragraph("第7章  IO——输入输出流", font);// 创建段落对象
			// 创建了一个章节对象,标题为"第7章 IO——输入输出流"
			Chapter chapter1 = new Chapter(paragraph1, 0);
			// 将编号级别设为 0 就不会在页面上显示章节编号
			chapter1.setNumberDepth(0);
			Font font1 = new Font(bfChinese, 14, Font.BOLD);
			font1.setColor(255, 0, 0);
			Paragraph section1_title1 = new Paragraph("7.1  什么是对象序列化?", font1);// 创建小节对象的标题
			Section section1 = chapter1.addSection(section1_title1);// 创建小节对象
			Font font2 = new Font(bfChinese, 12, Font.NORMAL);
			font2.setColor(0, 0, 0);
			Paragraph text = new Paragraph("什么是对象序列化呢?简单的说,就是将对象写入流,\\n"
					+ "而序列化解体则指从流中获取数据后,重构对象的过程。\\n"
					+ "Java的对象可以分为可序列化对象和不可序列化对象,\\n"
					+ "从说明文档中,可以看到只有实现了\\"Serializable\\"接口的对象才是可序列化对象。", font2);// 创建一个段落
			section1.add(text);// 将段落写入小节中
			text = new Paragraph("File类主要方法列表", font2);
			section1.add(text);
			Table table = new Table(2, 5); // 创建表格对象
			table.setBorderColor(new Color(220, 255, 100)); // 设置表格边框颜色
			// 设置单元格的边距间隔等
			table.setPadding(1);
			table.setSpacing(1);
			table.setBorderWidth(1);
			Cell cell = null; // 单元格对象
			// 添加表头信息
			cell = new Cell(new Paragraph("方法名称", font2));
			cell.setHeader(true);
			table.addCell(cell);
			cell = new Cell(new Paragraph("用法", font2));
			cell.setHeader(true);
			table.addCell(cell);
			table.endHeaders();
			// 添加表的内容
			table.addCell(new Cell("public Boolean canread()"));
			table.addCell(new Cell(new Paragraph("测试这个文件是否可以读?", font2)));
			table.addCell(new Cell("public Boolean canwrite()"));
			table.addCell(new Cell(new Paragraph("测试这个文件是否可写?", font2)));
			table.addCell(new Cell("public Boolean createNewFile()"));
			table.addCell(new Cell(new Paragraph(
					"看这个文件或目录是否存在,如有此文件则返回false,如果没有这个文件则创建这个类的对象.", font2)));
			table.addCell(new Cell("public Boolean delete()"));
			table.addCell(new Cell(new Paragraph(
					"删除当前对象所指文件。删除成功返回true,否则返回false.", font2)));
			section1.add(table); // 将表格对象添加到小节对象中
			List list = new List(true, false, 20);// 创建列表
			ListItem item = new ListItem("带缓存的字符输出流BufferedWriter类;", font2);// 创建列表项
			list.add(item);// 将列表项添加到列表中
			item = new ListItem("字符输入流FileReader类和FileWriter类的使用;", font2);
			list.add(item);
			item = new ListItem("读取带缓存的BufferedReader字符流t.", font2);
			list.add(item);
			section1.add(list); // 将列表对象添加到小节对象中
			// 将章节对象加入到文档中
			document.add(chapter1);
			// 关闭文档
			document.close();
			System.out.println("PDF文件生成成功,PDF文件名:" + file.getAbsolutePath());
		} catch (DocumentException e) {
			System.out.println("PDF文件" + file.getAbsolutePath() + "生成失败!" + e);
			e.printStackTrace();
		} catch (IOException ee) {
			System.out.println("PDF文件" + file.getAbsolutePath() + "生成失败!" + ee);
			ee.printStackTrace();
		} finally {
			if (out != null) {
				try {
					// 关闭输出文件流
					out.close();
				} catch (IOException e1) {
				}
			}
		}
	}

	public static void main(String[] args) {
		StreamDemo15 pdf = new StreamDemo15();
		String fileName = "D:/temp/myPDF.pdf";
		pdf.creatPDF(fileName);
	}

}


6.读取PDF文件中的内容

package outputintput;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;

public class StreamDemo18 {

	/**
	 * @param 读取PDF文件
	 */
	public static void main(String[] args) {
		StreamDemo18 pdf = new StreamDemo18();
		String pdfName = "D:\\\\temp\\\\myPDF.pdf";
		pdf.readFileOfPDF(pdfName);

	}

	// 读取指定的PDF文件的内容,其中:pdfName表示要读取的PDF文件的路径
	public void readFileOfPDF(String pdfName) {
		File file = new File(pdfName);// 创建一个文件对象
		FileInputStream infile = null;
		try {
			infile = new FileInputStream(pdfName);// 创建一个文件输入流
			// 新建一个PDF解析器对象
			PDFParser parser = new PDFParser(infile);
			// 对PDF文件进行解析
			parser.parse();
			// 获取解析后得到的PDF文档对象
			PDDocument pdfdocument = parser.getPDDocument();
			// 新建一个PDF文本剥离器
			PDFTextStripper stripper = new PDFTextStripper();
			// 从PDF文档对象中剥离文本
			String context = stripper.getText(pdfdocument);
			System.out.println("PDF文件" + file.getAbsolutePath() + "的文本内容如下:");
			System.out.println(context);

		} catch (Exception e) {
			System.out.println("读取PDF文件" + file.getAbsolutePath() + "失败!"
					+ e.getMessage());
		} finally {
			if (infile != null) {
				try {
					infile.close();
				} catch (IOException e1) {
				}
			}
		}
	}
}


7.利用poi读取Word文件中的内容。

package outputintput;

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

import org.apache.poi.hwpf.extractor.WordExtractor;

public class StreamDemo17 {
	/**
	 * @param 用POI读取word文件中的内容
	 */
	public static void main(String[] args) {
		StreamDemo17 s = new StreamDemo17();
		String path = "C:\\\\fileText.doc";
		try {
			s.readDocFile(path);
		} catch (IOException e) {
			System.out.println("读取失败:" + path + "文件不存在" + e.getMessage());
		}
	}
	public void readDocFile(String origFileName) throws IOException {
		System.out.println("C:\\\\fileText.doc中的内容如下:\\n");
		// 创建文件输入流
		FileInputStream in = new FileInputStream(new File(origFileName));
		WordExtractor extractor = null;
		String text = null;
		// 创建WordExtractor
		extractor = new WordExtractor(in);
		// 对DOC文件进行提取
		text = extractor.getText();
		System.out.println(text);
	}
}

三、字符流

1.追加文件内容

<span style="font-size:14px;">package outputintput;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;

public class CharactersDemo03 {
	// 使用RandomAccessFile实现文件的追加,其中:fileName表示文件名;content表示要追加的内容
	public static void appendMethod_one(String fileName, String content) {
		try {
			// 按读写方式创建一个随机访问文件流
			RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
			long fileLength = raf.length();// 获取文件的长度即字节数
			// 将写文件指针移到文件尾。
			raf.seek(fileLength);
			// 按字节的形式将内容写到随机访问文件流中
			raf.writeBytes(content);
			// 关闭流
			raf.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	// 使用FileWriter实现文件的追加,其中:fileName表示文件名;content表示要追加的内容
	public static void appendMethod_two(String fileName, String content) {
		try {
			// 创建一个FileWriter对象,其中boolean型参数则表示是否以追加形式写文件
			FileWriter fw = new FileWriter(fileName, true);
			// 追加内容
			fw.write(content);
			// 关闭文件输出流
			fw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void showFileContent(String fileName) {
		File file = new File(fileName);
		BufferedReader reader = null;
		try {
			System.out.println("以行为单位读取文件内容,一次读一整行:");
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			int line = 1;
			// 一次读入一行,直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				// 显示行号
				System.out.println(line + ": " + tempString);
				line++;
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
	}
	public static void main(String[] args) {
		String fileName = "D:/temp/append.txt";
		String content = "Successful operation!";
		System.out.println(fileName + "文件的内容如下:");
		CharactersDemo03.showFileContent(fileName); // 显示文件内容
		// 按RandomAccessFile的形式追加文件
		System.out.println("\\n按RandomAccessFile的形式追加文件后的内容如下:");
		CharactersDemo03.appendMethod_one(fileName, content);
		CharactersDemo03.appendMethod_one(fileName, "\\n Game is Over! \\n");
		CharactersDemo03.showFileContent(fileName); // 显示文件内容
		// 按FileWriter的形式追加文件
		System.out.println("\\n按FileWriter的形式追加文件后的内容如下:");
		CharactersDemo03.appendMethod_two(fileName, content);
		CharactersDemo03.appendMethod_two(fileName, "\\n Game is Over! \\n");
		CharactersDemo03.showFileContent(fileName); // 显示文件内容
	}
}
</span>


2.读取jar包内容

<span style="font-size:14px;">package outputintput;

import java.awt.geom.Area;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;

public class CharactersDemo05 {
	// javaClass表示类文件;filepath表示文件的相对路径
	public static void readJar_URL(Class javaClass, String filepath) {
		URL url = javaClass.getResource(filepath);// 获取定位资源URL对象
		System.out.println("资源的URL: " + url);
		try {
			InputStream stream = url.openStream();// 打开fileURL对应的文件流
			BufferedReader bufferedreader = new BufferedReader(// 创建一个缓冲字符输入流
					new InputStreamReader(stream));
			String str;
			while ((str = bufferedreader.readLine()) != null) {// 从缓冲字符输入流中按行读取信息
				System.out.println(str);
			}
			stream.close();// 关闭流
		} catch (IOException ioexception) {
			ioexception.printStackTrace();
		}
	}
	// 读Jar包中的资源信息,其中:javaClass表示类文件;filepath表示文件的相对路径
	public static void readJar_stream(Class javaClass, String filepath) {
		InputStream stream = javaClass.getResourceAsStream(filepath);// 获取该资源输入流的引用
		if (stream != null) {
			// 创建一个缓冲字符输入流
			BufferedReader bufferedreader = new BufferedReader(
					new InputStreamReader(stream));
			String str;
			try {
				// 从缓冲字符输入流中按行读取信息
				while ((str = bufferedreader.readLine()) != null) {
					System.out.println(str);
				}
				stream.close();
			} catch (IOException ioexception) {
				ioexception.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		System.out.println("以该class文件的位置为准,以URL的方式读取Jar包信息的内容如下:");
		Class javaClass = aa.class;//在该文件的目录下要存在aa.class文件
		String filePath = "config0.conf";//filePath的值是要读取的jar包名称
		CharactersDemo05.readJar_URL(javaClass, filePath);
		System.out.println();
		System.out.println("以该class文件的位置为准,以直接获取资源输入流的引用的方式读取Jar包信息的内容如下:");
		filePath = "bdc/config1.conf";//filePath的值是要读取的jar包名称
		CharactersDemo05.readJar_stream(javaClass, filePath);
		System.out.println();
		System.out.println("以该jar文件的位置为准,以URL的方式读取Jar包信息的内容如下::");
		filePath = "/jarTest/abc/bdc/config1.conf";//filePath的值是要读取的jar包名称
		CharactersDemo05.readJar_URL(javaClass, filePath);
	}
}</span><span style="font-size:18px;">
</span>

3文件的加密/解密操作

package outputintput;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;

public class CharactersDemo06 {
	private File file; // 存储文件对象信息
	byte[] buf; // 缓冲区,存储文件中的所有数据
	RandomAccessFile raf;
	public CharactersDemo06(String filename) {
		file = new File(filename);
		buf = new byte[(int) file.length()];
	}
	// 按照读写方式打开文件
	public void open() throws FileNotFoundException {
		raf = new RandomAccessFile(file, "rw");
	}
	// 关闭文件
	public void close() throws IOException {
		raf.close();
	}
	// 对文件进行加密或解密
	public void password() throws IOException {
		raf.read(buf);// 将文件内容读入到缓冲区中
		for (int i = 0; i < buf.length; i++)
			buf[i] = (byte) (~buf[i]);// 将缓冲区中的内容按位取反
		raf.seek(0);// 将文件指针定位到文件头部
		raf.write(buf);// 将缓冲区中的内容写入到文件中
	}
	// 显示文件的内容
	public static void showFileContent(String fileName) {
		File file = new File(fileName);
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			// 一次读入一行,直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				// 显示行号
				System.out.println(tempString);
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
	}
	public static void main(String argv[]) {
		CharactersDemo06 oa;
		if (argv.length < 1) {
			System.out.println("你需要指定待加密的文件名称!");
			return;
		}
		// 下面利用encrypt对象oa对由命令行参数指定的文件进行加密处理
		oa = new CharactersDemo06(argv[0]);
		try {
			oa.open();// 打开文件
			oa.password();// 先对指定的文件加密
			System.out.println("文件加密成功!加密后的文件内容如下:");
			CharactersDemo06.showFileContent(argv[0]);// 显示加密后文件的内容
			oa.password();// 再对已经加密的文件解密
			oa.close();// 关闭文件
			System.out.println("\\n文件解密成功!解密后的文件内容如下:");
			CharactersDemo06.showFileContent(argv[0]);// 显示解密后文件的内容
		} catch (FileNotFoundException e) {
			System.out.println("打不开指定文件:" + argv[0]);
		} catch (IOException e) {
			System.out.println("文件读写出错:" + argv[0]);
		}
	}
}


冲天之峰    20160616

以上是关于JAVA输入/输出流程序例题(文件和目录字节流字符流)的主要内容,如果未能解决你的问题,请参考以下文章

Java:字节流和字符流(输入流和输出流)

JAVA——IO流-字符流和字节流

字节流与字符流的区别详解

字节流与字符流的区别详解

从零开始的Java开发1-6-4 Java输入输出流:File类绝对路径和相对路径字节流缓冲流字符流对象序列化

Java IO流字节流和字符流详解