一般项目中都会遇到文件的读写,
一般有两个问题需要处理。
1路径问题
2阅读和写作问题
路径的解
路径之间的连接”//”=”\”=”/”
eg1:D磁盘下的文件夹中的1.txt
path = & # 8221d://file//1 . txt ”
path = & # 8221d:/file/1 . txt ”
path = & # 8221d:\ file \ 1 . txt ”
三种都可以。
1绝对路径(绝对不推荐)
是电脑根目录下的c盘和D盘。详情请参考eg1。
2相对路径
在java中,默认是从项目的根目录开始,如下所示。
获取这个目录中的所有文件(获取一个目录)
。/转到当前根目录
String path=”./”;File f=new File(path);File[] files=f.listFiles();for(int i=0;i<files.length;i++){System.out.println(files[i].getName());}
../获取根目录下的父目录。如果想得到多级父目录,只需要写N../(需要注意的是,这种方法最多只能获取Windows盘下的根目录,也就是最多只能获取c盘或者D盘,不可能像Linux一样获取/root/d盘)。
主要是区分工作室空和出版室空。
例如,上传struts2文件时。
定义接受文件的目录。
servlet context servlet context = servletactioncontext . getservlet context();
string str = servlet context . get realpath(“/files/”+file filename);
Eclipse暂时有点小问题。这个我以后再写。
读写文档(如有不正确,请积极指出,共同进步)
因为文件有不同的格式,就文本文件而言,有utf-8 GBK等等。
建议使用字节流(InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先)而不是字符流(Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先)
其实内部一个是byte[]实现的,另一个是char[]实现的。你可以看到JDK的源代码。
具体字符流和字节流的区别请看转载。
http://blog.csdn.net/zx***n660/article/details/7875799http://blog.csdn.net/cynhafa/article/details/6882061读写文件package com.wzh.utils;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;public class InOutFile {/*** @param file null、一个文件、一个文件目录、* <pre>* fileToByte(null)=null* fileToByte(file)=null file>2G* fileToByte(文件目录)=null* fileToByte(file)=byte[]* </pre>* @return null(文件不存在,null,文件目录,文件太大>2G) byte[](转换成功)*/public byte[] fileToByte(File file) {byte[] buffer = null;if (file == null) {throw new IndexOutOfBoundsException();}if (file.isDirectory())return buffer;if (file.length() > Integer.MAX_VALUE)return buffer;if (file.isFile()) {int filelength = (int) file.length();InputStream inputStream = null;BufferedInputStream bufferedInputStream = null;OutputStream outputStream=null;BufferedOutputStream bufferedOutputStream=null;File outfile=new File(“files//out//”+file.getName());int n = 0;int off = 0;int length = 4096;try {if(!outfile.exists())outfile.createNewFile();inputStream = new FileInputStream(file);outputStream=new FileOutputStream(outfile, true);bufferedInputStream = new BufferedInputStream(inputStream);bufferedOutputStream=new BufferedOutputStream(outputStream);buffer = new byte[filelength];/** 添加(length <= filelength – off) ? length : filelength – off)的比较* 为了防止读到最后buffer 剩余的长度没有4096 装不下那么多会导致读取不了IndexOutOfBoundsException()* 当filelength – off=0时表示文件读取完毕但是read内部认为是其他线程占用io导致堵塞并不会认为文件读取完毕* 所以要添加上filelength – off>0*/while ((filelength – off) > 0 && (n = bufferedInputStream.read(buffer, off,((length <= filelength – off) ? length : filelength – off))) >= 0) {bufferedOutputStream.write(buffer, off, n);off += n;}}catch (Exception e) {}finally {closeInputStream(bufferedInputStream);closeInputStream(inputStream);closeOutputStream(bufferedOutputStream);closeOutputStream(outputStream);System.out.println(“end”);}}return buffer;}/*** close inoutstream* @param inputStream null or the inputstream’s child*/private void closeInputStream(InputStream inputStream) {if (inputStream == null)return;try {inputStream.close();}catch (Exception e) {}}/*** close outputStream* @param outputStream null or the outputStream child*/private void closeOutputStream(OutputStream outputStream) {if (outputStream == null)return;try {outputStream.flush();outputStream.close();}catch (Exception e) {}}}
当然,字符流也可以用来读取文件。
也可以从流中读取字符,但是应该指定文件(文本文件)的编码。
/*** 创建不同格式的文本文件* @throws Exception*/private void createFile() throws Exception {File file = new File(“files//kindsfor***t//utf//1.txt”);//File file = new File(“files//kindsfor***t//gbk//1.txt”);if (!file.exists())file.createNewFile();Writer writer = new OutputStreamWriter(new FileOutputStream(file, true), “UTF-8”);//Writer writer = new OutputStreamWriter(new FileOutputStream(file), “GBK”);BufferedWriter bufferedWriter = new BufferedWriter(writer);bufferedWriter.write(“我是中文测试啊测试啊”);bufferedWriter.flush();bufferedWriter.close();writer.close();}
如有不妥请指出,谢谢。
本文来自夜遇投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/587964.html