Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法。Writer中 write(),flush()和close()方法为抽象方法。子类应该分别实现他们。
Java IO已经为我们提供了三个方便的Reader的实现类,FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。
FileReader读txt文件例子
FileReader fr = new FileReader("D:/Test.txt");
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print( (char)ch );
}
其中read()方法返回的是读取得下个字符。
InputStreamReader读txt文件例子
InputStream is = new FileInputStream(new File("D:/Test.txt"));
InputStreamReader fr = new InputStreamReader(is);
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print((char)ch);
}
这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。 read()方法是比较好费时间的,如果为了提高效率,我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用 readLine()方法。
BufferedReader br = new BufferedReader(new FileReader("Test.txt")));
String data = br.readLine();//一次读入一行,直到读入null为文件结束
while( data!=null){
System.out.println(data);
data = br.readLine(); //接着读下一行
}
当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先放入缓冲区,然后写入文件。因此有时候你需要主动调用flush()方法。
有读就有写,写文本文件可以使用PrintWriter,FileWriter,BufferedWriter。
FileWriter fw = new FileWriter("D:/Test.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));
osw.write(s,0,s.length());
osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);
pw.println(s);
fw.close();
osw.close();
pw.close();
如果想接着写入某个文件。 声明时FileWriter fw = new FileWriter("log.txt",true);加个true就可以了。
File file = new File("D:/Test.txt");
File dest = new File("D:/new.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(dest));
String line = reader.readLine();
while(line!=null){
writer.write(line);
line = reader.readLine();
}
writer.flush();
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
B. java如何判断文件是否被更新过
在数据库中增加一个字段,int的,初始为0,每次更新字段加1.判断字段值就知道更新了几次了.
我对出c/s的不是很熟悉,你看看这个网址的吧
http://topic.csdn.net/u/20081031/19/4628786f-ad82-44e8-a44a-063c9774c339.html
C. java编写程序获取指定文件的最后修改时间
package com.xian.home2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class FileOperate {
/**
* @param args
*/
public static void main(String[] args) {
// FileOperate fo = new FileOperate();
// String filepath = "G:\\02";
// fo.getFileList(filepath);
getCreateTime();
}
public List<File> getFileList(String filepath) {
try {
File file = new File(filepath);
if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File Ifile = new File(filepath + "\\" + filelist[i]);
FileInputStream fis = new FileInputStream(Ifile);
long modifiedTime = Ifile.lastModified();
Date date=new Date(modifiedTime);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM");
String dd=sdf.format(date);
System.out.println("File name:" + Ifile.getName()
+ " \tFile size: "
+ (double) ((double) fis.available() / 1024 / 1024)
+ "M"+ " \tFile create Time: "+dd);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 读取文件创建时间
*/
public static void getCreateTime(){
String filePath = "G:\\02\\123.txt";
String strTime = null;
try {
Process p = Runtime.getRuntime().exec("cmd /C dir "
+ filePath
+ "/tc" );
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while((line = br.readLine()) != null){
if(line.endsWith(".txt")){
strTime = line.substring(0,17);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("创建时间 " + strTime);
//输出:创建时间 2009-08-17 10:21
}
/**
* 读取文件修改时间的方法1
*/
@SuppressWarnings("deprecation")
public static void getModifiedTime_1(){
File f = new File("C:\\test.txt");
Calendar cal = Calendar.getInstance();
long time = f.lastModified();
cal.setTimeInMillis(time);
//此处toLocalString()方法是不推荐的,但是仍可输出
System.out.println("修改时间[1] " + cal.getTime().toLocaleString());
//输出:修改时间[1] 2009-8-17 10:32:38
}
/**
* 读取修改时间的方法2
*/
public static void getModifiedTime_2(){
File f = new File("C:\\test.txt");
Calendar cal = Calendar.getInstance();
long time = f.lastModified();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
cal.setTimeInMillis(time);
System.out.println("修改时间[2] " + formatter.format(cal.getTime()));
//输出:修改时间[2] 2009-08-17 10:32:38
}
}
D. 用java编写记事本,如何在退出时检查是否与修改过文件内容
最近刚好在写记事本程序作业。
该部分代码如下:
else if ("退出".equals(comm)) {
int s = JOptionPane.showConfirmDialog(this, "确定要退出系统吗?", "Java程序设计综合实验", JOptionPane.YES_NO_OPTION);
if (s == JOptionPane.YES_OPTION) {
int s1 = JOptionPane.showConfirmDialog(this, "是否要保存文件?", "Java程序设计综合实验",
JOptionPane.YES_NO_CANCEL_OPTION);
if (s1 == JOptionPane.YES_OPTION) {
JFileChooser jfc = new JFileChooser("D:\\");
if (flag) {
int returnVal = jfc.showDialog(null, "保存");
if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性
f = jfc.getSelectedFile();
flag = false;
write();
}
} else {
write();
}
System.exit(0);
}
if (s1 == JOptionPane.NO_OPTION)
System.exit(0);
}
}
E. java读取、修改、写入txt文件
Java IO系统里读写文件使用和Writer两个抽象类,Reader中read()和close()方法都是抽象方法。Writer中 write(),flush()和close()方法为抽象方法。子类应该分别实现他们。
Java IO已经为我们提供了三个方便的Reader的实现类,FileReader,InputStreamReader和BufferedReader。其中最重要的类是InputStreamReader, 它是字节转换为字符的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。
FileReader读txt文件例子
FileReader fr = new FileReader("D:/Test.txt");
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print( (char)ch );
}
其中read()方法返回的是读取得下个字符。
InputStreamReader读txt文件例子
InputStream is = new FileInputStream(new File("D:/Test.txt"));
InputStreamReader fr = new InputStreamReader(is);
int ch = 0;
while((ch = fr.read())!=-1 ){
System.out.print((char)ch);
}
这和FileReader并没有什么区别,事实上在FileReader中的方法都是从InputStreamReader中继承过来的。 read()方法是比较好费时间的,如果为了提高效率,我们可以使用BufferedReader对Reader进行包装,这样可以提高读取得速度,我们可以一行一行的读取文本,使用 readLine()方法。
BufferedReader br = new BufferedReader(new FileReader("Test.txt")));
String data = br.readLine();//一次读入一行,直到读入null为文件结束
while( data!=null){
System.out.println(data);
data = br.readLine(); //接着读下一行
}
当你明白了如何用Reader来读取文本文件的时候那么用Writer写文件同样非常简单。有一点需要注意,当你写文件的时候,为了提高效率,写入的数据会先放入缓冲区,然后写入文件。因此有时候你需要主动调用flush()方法。
有读就有写,写文本文件可以使用PrintWriter,FileWriter,BufferedWriter。
FileWriter fw = new FileWriter("D:/Test.txt");
String s = "hello world";
fw.write(s,0,s.length());
fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/Test1.txt"));
osw.write(s,0,s.length());
osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("D:/Test2.txt")),true);
pw.println(s);
fw.close();
osw.close();
pw.close();
如果想接着写入某个文件。 声明时FileWriter fw = new FileWriter("log.txt",true);加个true就可以了。
File file = new File("D:/Test.txt");
File dest = new File("D:/new.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(dest));
String line = reader.readLine();
while(line!=null){
writer.write(line);
line = reader.readLine();
}
writer.flush();
reader.close();
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
F. 用java怎么判断FTP上的文件大小改变了
日志目录:
已经架设了一个IIS下的FTP服务器,应该如何查看连接日志?
答:利用IIS架设的FTP服务器不能实时看到连接的具体情况,不过可以在C:\Winnt\system32\logfiles目录中查看到连接上FTP服务器的IP地址、时间等日志信息。
如何开启日志:
在默认FTP站点属性对话框中,切换到“FTP站点”标签页,一定要确保“启用日志记录”选项被选中,这样就可以在“事件查看器”中查看FTP日志记录了。
我感觉,这种方法也不是实时的,你只是将轮询文件变成了轮询日志,一样的感觉。
你如果想变成实时的,就是说文件大小一发生改变就通知你。我想到的办法是这样的。
你再做一个系统,这个系统可以较大频率的去轮询日志或者文件,因为这个系统可以架设在别的机器上,所以不会影响你系统的性能。然后在你系统中建立一个webservice,提供下载那个文件的服务,当那个系统发现更改时调用你的webservice,你就可以下载了。
我觉得这只是一种折中的办法,而且也比较费事,如果没有实时的要求,还是定时轮询的好。
PS:
实话说不知道你为什么要检验文件的大小,有时内容改变不一定大小会变得。
你可以记录文件上一次的修改时间。然后当这个发生改变时再取就是了。
G. 如何用java判断一个文件正在被其他进程修改
JAVA本身判断不到,只可以判断是否打开失败
~
~
~~~~~~~~~~~
H. 如何通过java实现对指定目录下的txt文件进行增删改查
代码如下:
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.util.ArrayList;
importjava.util.List;
publicclassApp61{
publicstaticvoidmain(String[]args)throwsIOException{
//查找行输出
Stringline=findFileLine("mylist.txt","abc");
System.out.println(line);
//删除指定行
removeFileLine("mylist.txt",2);
}
staticvoidremoveFileLine(Stringfile,intline)throwsIOException{
List<String>lines=readFileLines(file);
lines.remove(line-1);
FileOutputStreamoutputStream=null;
=null;
BufferedWriterwriter=null;
try{
outputStream=newFileOutputStream(file);
streamWriter=newOutputStreamWriter(outputStream);
writer=newBufferedWriter(streamWriter);
for(Stringstr:lines){
writer.write(str+System.lineSeparator());
}
}finally{
if(writer!=null){
writer.close();
}
if(streamWriter!=null){
streamWriter.close();
}
if(outputStream!=null){
outputStream.close();
}
}
}
//查找行
staticStringfindFileLine(Stringfile,Stringkeywork)throwsIOException{
List<String>lines=readFileLines(file);
for(Stringline:lines){
if(line.contains(keywork)){
returnline;
}
}
return"";
}
//返回文件所有行
staticList<String>readFileLines(Stringfile)throwsIOException{
List<String>lines=newArrayList<>();
FileInputStreaminputStream=null;
InputStreamReaderstreamReader=null;
BufferedReaderreader=null;
try{
inputStream=newFileInputStream(file);
streamReader=newInputStreamReader(inputStream);
reader=newBufferedReader(streamReader);
Stringline="";
while((line=reader.readLine())!=null){
lines.add(line);
}
}finally{
if(reader!=null){
reader.close();
}
if(streamReader!=null){
streamReader.close();
}
if(inputStream!=null){
inputStream.close();
}
}
returnlines;
}
}
I. java io流对文件的增删改查
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到的内容,之后通过if判断来实现在某些特定位置的查找、增加、删除、修改操作。
举例:
BufferedReader bre = null;
OutputStreamWriter pw = null;//定义一个流
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
if(str.indexOf("排除")<0){//判断是否需要舍弃
pw.write(str);//将要写入文件的内容,可以多次write
}
}
bre.close();//关闭流
pw.close();//关闭流
解释:以上方法是实现的删除,if中的条件改变下,即可实现其余的功能。
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。