RandomAccessFile1每次读完都要关闭,如果不影响其他线程写入则可以不关2在程序中记录已读取的大小,getFilePointer(); 每次打开可直接seek到指定位置该类可以readLine()long getFilePointer() Returns the current offset in this file. void seek(long pos) Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
唉,先用笨办法实现了,RandomAccessFile这个类以前没有接触过,网上找了点例子看的不是很明白,先用笨办法解决了,我再研究下RandomAccessFile,搞定之后再改过来。公司让做一个FTP程序,实现定是上传下载功能,客户端用的swing,服务端是webservice。有详细的传输监控日志,本来是写数据库的,没什么问题,不过后来改成日志写本地文件,不写数据库了,所以才有这个问题。我现在方法是把文件内容放到list里,然后在取符合条件的,以下是代码:import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List;public class FileRead { public List Test(String filepath) { List ls = new ArrayList();
package com.hoo.utils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class OperateFileUtils {
/***************************************************************************
* <b>function:</b> 在java中 路径/需要替换成\\
* @createDate 2010-6-4 上午11:18:45
* @param file 替换的文件
* @return 替换后的路径
*/
private static String getAvailablePath(File file) {
return file.getPath().replace('\\', '/');
}
/***************************************************************************
* <b>function:</b> 返回某个文件夹下所有的文件
* @createDate 2010-6-4 上午11:21:07
* @param fileList 找到的文件集合
* @param path 路径
* @param fileSuffix 要找的文件后缀
*/
public static void getFiles(List<File> fileList, String path, String fileSuffix) {
File file = new File(path);
File[] files = file.listFiles();
if (files == null) {
return;
} else {
for (int i = 0; i < files.length; i++) {
// 判断是否是文件夹
if (files[i].isDirectory()) {
// 递归调用getFiles方法,得到所有的文件
getFiles(fileList, getAvailablePath(files[i]), fileSuffix);
} else if (files[i].getName().lastIndexOf(fileSuffix) != -1) {// 只处理fileSuffix后缀的文档
// copyFileAndAddPackageName(files[i]);
fileList.add(files[i]);// 添加到文件集合中
}
// System.out.println(files[i].getAbsolutePath().replace('\\',
// '/'));
}
}
}
/***************************************************************************
* <b>function:</b> 把文件内容复制到指定文件中
* @createDate 2010-6-4 下午12:09:42
* @author 3hhuj 胡佳
* @param file 要操作的文件
* @param toFile 保存的文件
*/
public static void copyFile2TempFile(List<File> fileList, File toFile) {
BufferedWriter bw = null;
BufferedReader br = null;
FileWriter fileWriter = null;
FileReader fileReader = null;
try {
StringBuilder sb = new StringBuilder();
String content = "";
for (File textFile : fileList) {
System.out.println(textFile.getName());
fileReader = new FileReader(textFile);// 读取文件的内容
br = new BufferedReader(fileReader);
while ((content = br.readLine()) != null) {
System.out.println(content);
if (!content.trim().equals("")) {
sb.append(content);// .append("\r");
}
}
}
fileWriter = new FileWriter(toFile);// 向文件中写入刚才读取文件中的内容
bw = new BufferedWriter(fileWriter);
bw.write(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
fileWriter.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/***************************************************************************
* <b>function:</b> 读取单个文件
* @createDate 2010-6-4 下午01:42:33
* @param file 读取内容的文件
* @param toFile 保存后的文件
*/
public static void copyFile2TempFile(File file, File toFile) {
BufferedWriter bw = null;
BufferedReader br = null;
FileWriter fileWriter = null;
FileReader fileReader = null;
try {
StringBuilder sb = new StringBuilder();
String content = "";
fileReader = new FileReader(file);// 读取文件的内容
br = new BufferedReader(fileReader);
while ((content = br.readLine()) != null) {
System.out.println(content);
if (!content.trim().equals("")) {
sb.append(content);// .append("\r");
}
}
fileWriter = new FileWriter(toFile);// 向文件中写入刚才读取文件中的内容
bw = new BufferedWriter(fileWriter);
bw.write(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
fileWriter.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
List<File> fileList = new ArrayList<File>();
getFiles(fileList, "c:/txt_test", ".txt");
getFiles(fileList, "c:/txt", ".txt");
// 将读取的内容放入tempFile中
File tempFile = new File("c:\\temp.txt");
if (!tempFile.exists()) {
try {
//不存在就创建一个
tempFile = File.createTempFile("temp", ".txt", new File("c:\\"));
} catch (IOException e) {
e.printStackTrace();
}
}
//copyFile2TempFile(fileList, tempFile);
copyFile2TempFile(new File("c:\\a.txt"), tempFile);
}
}
package com.hoo.utils;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class OperateFileUtils { /***************************************************************************
* <b>function:</b> 在java中 路径/需要替换成\\
* @createDate 2010-6-4 上午11:18:45
* @param file 替换的文件
* @return 替换后的路径
*/
private static String getAvailablePath(File file) {
return file.getPath().replace('\\', '/');
} /***************************************************************************
* <b>function:</b> 返回某个文件夹下所有的文件
* @createDate 2010-6-4 上午11:21:07
* @param fileList 找到的文件集合
* @param path 路径
* @param fileSuffix 要找的文件后缀
*/
public static void getFiles(List<File> fileList, String path, String fileSuffix) {
File file = new File(path);
File[] files = file.listFiles();
if (files == null) {
return;
} else {
for (int i = 0; i < files.length; i++) {
// 判断是否是文件夹
if (files[i].isDirectory()) {
// 递归调用getFiles方法,得到所有的文件
getFiles(fileList, getAvailablePath(files[i]), fileSuffix);
} else if (files[i].getName().lastIndexOf(fileSuffix) != -1) {// 只处理fileSuffix后缀的文档
// copyFileAndAddPackageName(files[i]);
fileList.add(files[i]);// 添加到文件集合中
}
// System.out.println(files[i].getAbsolutePath().replace('\\',
// '/'));
}
}
} /***************************************************************************
* <b>function:</b> 把文件内容复制到指定文件中
* @createDate 2010-6-4 下午12:09:42
* @author 3hhuj 胡佳
* @param file 要操作的文件
* @param toFile 保存的文件
*/
public static void copyFile2TempFile(List<File> fileList, File toFile) {
BufferedWriter bw = null;
BufferedReader br = null;
FileWriter fileWriter = null;
FileReader fileReader = null;
try {
StringBuilder sb = new StringBuilder();
String content = "";
for (File textFile : fileList) {
System.out.println(textFile.getName());
fileReader = new FileReader(textFile);// 读取文件的内容
br = new BufferedReader(fileReader);
while ((content = br.readLine()) != null) {
System.out.println(content);
if (!content.trim().equals("")) {
sb.append(content);// .append("\r");
}
}
}
fileWriter = new FileWriter(toFile);// 向文件中写入刚才读取文件中的内容
bw = new BufferedWriter(fileWriter);
bw.write(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bw.close();
br.close();
fileWriter.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
} } public static void main(String[] args) {
List<File> fileList = new ArrayList<File>();
getFiles(fileList, "c:/txt_test", ".txt");
getFiles(fileList, "c:/txt", ".txt");
// 将读取的内容放入tempFile中
File tempFile = new File("c:\\temp.txt");
if (!tempFile.exists()) {
try {
//不存在就创建一个
tempFile = File.createTempFile("temp", ".txt", new File("c:\\"));
} catch (IOException e) {
e.printStackTrace();
}
}
//copyFile2TempFile(fileList, tempFile);
copyFile2TempFile(new File("c:\\a.txt"), tempFile);
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/IBM_hoojo/archive/2010/06/04/5647373.aspx
每次打开可直接seek到指定位置该类可以readLine()long getFilePointer()
Returns the current offset in this file. void seek(long pos)
Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
然后往前查,看看是不是够十行,不够直接读取所有够的话,就读十行
http://www.javaeye.com/problems/42748
tail -f fileName
就可以了
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class FileRead {
public List Test(String filepath)
{
List ls = new ArrayList();
FileReader fr = null;
BufferedReader br = null;
String line = "";
try {
fr = new FileReader(filepath);
br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
ls.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally
{
if(br != null && fr != null)
{
try {
br.close();
br = null;
fr.close();
fr = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return ls;
}
}