1、读文件:
readLine()是BufferedReader类的一个方法,它每次从缓冲里读一行数据。
BufferedReader类参数可为:InputStreamReader、FileReader类型
FileReader(File file)
FileReader(String fileName)
InputStreamReader(InputStream in)
//接收键盘输入作为输入流,把输入流放到缓冲流里面
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferReader in=new BufferReader(new FileReader(name))
请编写一个字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
void doPack(String fileNameAndPath) { FileReader fr; try { fr=new FileReader(fileNameAndPath); BufferedReader br=new BufferedReader(fr); String readLine=null; int lineNumber=1; while((readLine=br.readLine())!=null) { readLine=lineNumber+":"+readLine; System.out.println(readLine); lineNumber++; } } catch (Exception e) { e.printStackTrace(); } }
易错地方:
while(br.readLine()!=null){ System.out.println(br.readLine()); } 其中每个循环(一次打印)br.readLine()被执行了两次,当然是隔行打印!!. 应该是 BufferedReader br=new BufferedReader(file); String line = null; while((line = br.readLine()) != null){ System.out.println(line); }
2、写文件:
BufferWriter(Writer out)
BufferWriter的参数类型可为:FileWriter、OutputStreamWriter
FileWriter(String fileName)
FileWriter(File file)
OutputStreamWriter(OutputStream out)
1、
File file = new File(“D:\\abc.txt“); FileWriter fw = new FileWriter("f:/jackie.txt");//创建FileWriter对象,用来写入字符流 BufferedWriter output = new BufferedWriter(fw); output.write(s1);
2.
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
3、
FileOutputStream fo = new FileOutputStream(filePath); OutputStreamWriter out = new OutputStreamWriter(fo, "UTF-8"); out.write(fileContent); out.close();
4、
// 写源文件 PrintStream print = null; try { print = new PrintStream(file.getPath() + "/" + proxy + ".java", "UTF-8"); } catch (Exception e) { e.printStackTrace(); } String code = sb.append("\n").toString(); print.print(code); print.close();
JDK:
public PrintStream(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException { this(false, new FileOutputStream(fileName)); init(new OutputStreamWriter(this, csn)); } private void init(OutputStreamWriter osw) { this.charOut = osw; this.textOut = new BufferedWriter(osw); }
其他:
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。
FileWriter只能写文本文件
InputStream in = new BufferedInputStream( new FileInputStream(filePath));
例子:
private void copy(File src, File dst) { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE); byte[] buffer = new byte[BUFFER_SIZE]; int len = 0; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { if (null != in) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != out) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
/* Reads some number of bytes from the input stream and stores them into * the buffer array <code>b</code>. The number of bytes actually read is * returned as an integer. */ public int read(byte b[]) /* * Writes <code>len</code> bytes from the specified byte array * starting at offset <code>off</code> to this output stream. */ public void write(byte b[], int off, int len)
。。。
InputStream转byte[]:
private byte[] InputStreamToByte(InputStream is) throws IOException { ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); int ch; while ((ch = is.read()) != -1) { bytestream.write(ch); } byte bb[] = bytestream.toByteArray(); bytestream.close(); return bb; }
byte[] 转InputStream
byte[] data; InputStream is = new ByteArrayInputStream(data);
二、Java中properties文件的读写
1.总结:
setProperty()中,如果你的属性是文件里面没有的属性,系统会进行追加,如果你的属性,在系统中已经存在,那么系统就会进行更新操作.
读取1:
// 根据key读取value public void readValue(String filePath, String key) { Properties props = new Properties(); InputStream in = new BufferedInputStream(new FileInputStream(filePath)); //Thread.currentThread().getContextClassLoader().getResourceAsStream("eop.properties"); props.load(in); // 从输入流中读取属性列表(键和元素对) String value = props.getProperty(key); } // 读取properties的全部信息 public static void readProperties(String filePath) { Properties props = new Properties(); InputStream in = new BufferedInputStream(new FileInputStream(filePath)); props.load(in); Enumeration en = props.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); String value = props.getProperty(key); } }
读取2、
ResourceBundle bundle = ResourceBundle.getBundle("currencyURL"); Enumeration<String> enums = bundle.getKeys(); while (enums.hasMoreElements()) { String key = enums.nextElement(); String value = bundle.getString(key); }
currencyURL.properties:
写入:
InputStream fis = new FileInputStream(filePath); prop.load(fis); prop.setProperty(parameterName, parameterValue); // 将此 Properties 表中的属性列表(键和元素对)写入输出流 prop.store( new FileOutputStream(filePath), "commont"); //void java.util.Properties.store(OutputStream out, String comments)
3、将文件转换为字节流byte[]
法1:
String fileName = "d:/gril.gif"; //源文件 String strBase64 = null; try { InputStream in = new FileInputStream(fileName); // in.available()返回文件的字节长度 byte[] bytes = new byte[in.available()]; // 将文件中的内容读入到数组中 in.read(bytes); in.close();
法2:
InputStream in = new FileInputStream(filename); ByteArrayOutputStream ba = new ByteArrayOutputStream(); int i = -1; while( (i = in.read()) != -1 ){ ba.write(i); } byte[] bb = ba.toByteArray(); //想要直接弹出,需加上response这4句 response.reset(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\""); response.setContentLength(bb.length); try { ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bb, 0, bb.length); ouputStream.flush(); ouputStream.close(); } catch (IOException e) { e.printStackTrace(); throw new SystemException(e.getMessage()); }
BufferedInputStream bufferedInputStream = null; BufferedOutputStream bufferedOutputStream = null; try { bufferedInputStream = new BufferedInputStream(new FileInputStream(tmpFile)); response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + getDownloadFileName(tmpFile.getName()) + "\""); bufferedOutputStream = new BufferedOutputStream(response.getOutputStream()); byte[] cbuf = new byte[1024]; int count; while ((count = bufferedInputStream.read(cbuf, 0, 1024)) != -1) { bufferedOutputStream.write(cbuf, 0, count); bufferedOutputStream.flush(); } } catch (Exception e) { log.error("用户点击取消下载", e); return; } finally { try { if (bufferedOutputStream != null) { bufferedOutputStream.close(); } } catch (Exception e) { log.error("bufferedOutputStream.close()", e); } try { assert (bufferedInputStream != null); bufferedInputStream.close(); } catch (Exception e) { log.error("bufferedInputStream.close()", e); } }
java中字节流与字符流的主要区别
流就是stream,是程序输入或输出的一个连续的字节序列,设备(例如鼠标,键盘,磁盘,屏幕和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现---不一定是物理磁盘文件,还可以是对应与某个输入/输出源的逻辑文件
字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
字节流是最基本的,所有的InputStream和OutputStream的子类都是字节流,其主要用于处理二进制数据,并按字节来处理。实际开发中很多的数据是文本,这就提出了字符流的概念。它按虚拟机的encode来处理,也就是要进行字符流的转化。这两者之间通过InputStreamReader和OutputStreamWriter来关联。实际上通过byte[]和String来关联在实际开发中出现的汉字问题,这都是在字符流和字节流之间转化不统一造成的。
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘 。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串 ; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
字节流转化为字符流,实际上就是byte[]转化为String。
字符流转化为字节流,实际上就是String转化为byte[]。
至于java.io中还出现了许多其他的流,主要是为了提高性能和使用方便,如BufferedInputStream、PipedInputStream等。
===============================================================================
一.获得控制台用户输入的信息
public String getInputMessage() throws IOException...{
System.out.println("请输入您的命令∶");
byte buffer[]=new byte[1024];
int count=System.in.read(buffer);
char[] ch=new char[count-2];//最后两位为结束符,删去不要
for(int i=0;i<count-2;i++)
ch[i]=(char)buffer[i];
String str=new String(ch);
return str;
}
可以返回用户输入的信息,不足之处在于不支持中文输入,有待进一步改进。
二.复制文件
1.以文件流的方式复制文件
public void copyFile(String src,String dest) throws IOException...{
FileInputStream in=new FileInputStream(src);
File file=new File(dest);
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 i=0;i<c;i++)
out.write(buffer[i]);
}
in.close();
out.close();
}
该方法经过测试,支持中文处理,并且可以复制多种类型,比如txt,xml,jpg,doc等多种格式
三.写文件
1.利用PrintStream写文件
public void PrintStreamDemo()...{
try ...{
FileOutputStream out=new FileOutputStream("D:/test.txt");
PrintStream p=new PrintStream(out);
for(int i=0;i<10;i++)
p.println("This is "+i+" line");
} catch (FileNotFoundException e) ...{
e.printStackTrace();
}
}
2.利用StringBuffer写文件
public void StringBufferDemo() throws IOException......{
File file=new File("/root/sms.log");
if(!file.exists())
file.createNewFile();
FileOutputStream out=new FileOutputStream(file,true);
for(int i=0;i<10000;i++)......{
StringBuffer sb=new StringBuffer();
sb.append("这是第"+i+"行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 ");
out.write(sb.toString().getBytes("utf-8"));
}
out.close();
}
该方法可以设定使用何种编码,有效解决中文问题。
四.文件重命名
public void renameFile(String path,String oldname,String newname)...{
if(!oldname.equals(newname))...{//新的文件名和以前文件名不同时,才有必要进行重命名
File oldfile=new File(path+"/"+oldname);
File newfile=new File(path+"/"+newname);
if(newfile.exists())//若在该目录下已经有一个文件和新文件名相同,则不允许重命名
System.out.println(newname+"已经存在!");
else...{
oldfile.renameTo(newfile);
}
}
}
五.转移文件目录
转移文件目录不等同于复制文件,复制文件是复制后两个目录都存在该文件,而转移文件目录则是转移后,只有新目录中存在该文件。
public void changeDirectory(String filename,String oldpath,String newpath,boolean cover)...{
if(!oldpath.equals(newpath))...{
File oldfile=new File(oldpath+"/"+filename);
File newfile=new File(newpath+"/"+filename);
if(newfile.exists())...{//若在待转移目录下,已经存在待转移文件
if(cover)//覆盖
oldfile.renameTo(newfile);
else
System.out.println("在新目录下已经存在:"+filename);
}
else...{
oldfile.renameTo(newfile);
}
}
}
六.读文件
1.利用FileInputStream读取文件
public String FileInputStreamDemo(String path) throws IOException...{
File file=new File(path);
if(!file.exists()||file.isDirectory())
throw new FileNotFoundException();
FileInputStream fis=new FileInputStream(file);
byte[] buf = new byte[1024];
StringBuffer sb=new StringBuffer();
while((fis.read(buf))!=-1)...{
sb.append(new String(buf));
buf=new byte[1024];//重新生成,避免和上次读取的数据重复
}
return sb.toString();
}
2.利用BufferedReader读取
在IO操作,利用BufferedReader和BufferedWriter效率会更高一点
public String BufferedReaderDemo(String path) throws IOException...{
File file=new File(path);
if(!file.exists()||file.isDirectory())
throw new FileNotFoundException();
BufferedReader br=new BufferedReader(new FileReader(file));
String temp=null;
StringBuffer sb=new StringBuffer();
temp=br.readLine();
while(temp!=null)...{
sb.append(temp+" ");
temp=br.readLine();
}
return sb.toString();
}
3.利用dom4j读取xml文件
public Document readXml(String path) throws DocumentException, IOException...{
File file=new File(path);
BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
SAXReader saxreader = new SAXReader();
Document document = (Document)saxreader.read(bufferedreader);
bufferedreader.close();
return document;
}
七.创建文件(文件夹)
1.创建文件夹
public void createDir(String path)...{
File dir=new File(path);
if(!dir.exists())
dir.mkdir();
}
2.创建新文件
public void createFile(String path,String filename) throws IOException...{
File file=new File(path+"/"+filename);
if(!file.exists())
file.createNewFile();
}
八.删除文件(目录)
1.删除文件
public void delFile(String path,String filename)...{
File file=new File(path+"/"+filename);
if(file.exists()&&file.isFile())
file.delete();
}
2.删除目录
要利用File类的delete()方法删除目录时,必须保证该目录下没有文件或者子目录,否则删除失败,因此在实际应用中,我们要删除目录,必须利用递归删除该目录下的所有子目录和文件,然后再删除该目录。
public void delDir(String path)...{
File dir=new File(path);
if(dir.exists())...{
File[] tmp=dir.listFiles();
for(int i=0;i<tmp.length;i++)...{
if(tmp[i].isDirectory())...{
delDir(path+"/"+tmp[i].getName());
}
else...{
tmp[i].delete();
}
}
dir.delete();
}
}
相关推荐
总结起来,Java中按顺序读取文件主要依赖于I/O流,特别是`FileReader`和`BufferedReader`类的组合。理解这些基本概念和操作对于任何Java开发者来说都是至关重要的,因为它们构成了处理文件数据的基础。在实际编程中...
2. **Java读取CSV文件**: - 使用`BufferedReader`和`InputStreamReader`组合,可以指定字符编码读取文件。例如: ```java FileInputStream fis = new FileInputStream("path_to_file.csv"); InputStreamReader ...
### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是指使用Java语言来读取大...
在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类来实现二进制文件的读写,并提供...
### Java读取SHP文件及DBF属性的关键技术解析 #### 概述 在地理信息系统(GIS)领域,Shapefile是一种常见的矢量数据格式,用于存储地理位置信息及相关属性数据。一个完整的Shapefile由多个文件组成,包括.shp、....
在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...
总结,Java中的文件读写操作涉及到多个类和接口,理解并熟练运用它们是每个Java开发者必备的技能。通过上述介绍和示例,你应该对Java的文件操作有了基本的认识。实践中,你可以根据具体需求选择合适的方法和类,实现...
Java 读取 Excel 文件是许多开发任务中的常见需求,Apache POI 是一个广泛使用的开源库,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在本案例中,提供的压缩包 "poi.zip" 包含了两个子文件:poi-bin-...
总结,Java中读取Properties文件是通过`java.util.Properties`类来实现的,涉及的关键步骤包括加载文件、获取键值对以及处理可能的异常。这种机制在许多场景下都非常实用,如数据库连接配置、应用设置等。理解并熟练...
总结来说,Java通过I/O流可以轻松读取本地HTML文件,结合`Jsoup`库可以方便地处理HTML内容,最后使用JDBC将处理后的数据保存到数据库。这些都是Java开发中常用的技术,对于网络编程和数据处理非常实用。
### Java读取Excel文件知识点详解 #### 一、引言 在日常开发工作中,经常需要处理Excel文件。Java作为一种广泛使用的编程语言,提供了多种库来读取Excel文件,其中较为常用的有Apache POI和JExcelApi等。本文将详细...
根据给定的文件信息,我们将深入探讨Java读写文件文本文件的关键知识点,这些知识点主要集中在文件的读取、写入以及流的复制等操作上。 ### Java读取文本文件 在Java中,读取文本文件通常涉及到使用`InputStream`...
总结,通过使用`java.nio`包,我们可以实现按行读取大文件,避免一次性加载整个文件导致的内存问题。同时,结合适当的解析策略和数据库插入操作,可以有效地将大文件内容解析并存储到数据库中。在实际应用中,应根据...
以上就是关于Java IO读写文件的基本操作及如何从一个文件中筛选数据并保存到另一个文件中的详细解析。通过这种方式,我们可以有效地处理文本文件中的数据,实现数据的筛选和转换功能。这对于处理大量数据、进行数据...
通过上述四个主要部分的分析,我们可以看到Java语言在处理文件读写方面提供了丰富的API支持。使用合适的类库可以极大地简化开发工作并提高程序的性能。例如,使用`StringBuffer`可以有效地处理字符串的动态增长;而`...
### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...
### Java读取资源文件时内容过长与换行的处理 在Java开发过程中,经常会遇到需要读取资源文件的情况,比如配置文件、属性文件等。这些文件中的内容有时会非常长,或者为了提高可读性,需要进行换行处理。本文将详细...
不同的操作系统、软件可能使用不同的默认编码格式,这就会导致在跨平台或跨软件间读写文件时出现乱码问题。因此,在处理文件时,明确指定文件的编码格式是十分重要的。 #### 三、Java读取XML文件 对于XML文件的读取...
### Java 中对文件的读写操作之比较 #### 引言 在Java中,文件的读写操作是一项基本且重要的功能。随着Java的发展,不同版本提供了多种方式来处理文件读写,这使得开发者可以根据实际需求选择最合适的方法。本文将...