[英]Skip certain number of lines while reading a text file - BufferedReader Java
我在目錄中有幾個文件,打算跳過一定數量的行。 使行跳過的唯一方法是使字符長度為1的行首次出現。唯一可用的信息是該行出現在行號60之前的任何位置。因此,我編寫了以下方法來嘗試跳過字符前面的行。 但是我最終得到與原始文件相同的文件:
public static void editSplitFiles(File sourceDir) {
FilenameFilter only = new OnlyExt("RPT");
log.debug("Editing Split Files........");
String[] filenames = sourceDir.list(only);
try {
for (int k = 0; k < filenames.length; k++) {
FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]);
BufferedReader br = new BufferedReader(new InputStreamReader(fs));
FileOutputStream fos = new FileOutputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k] + ".LST");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
String strLine;
int num = 0;
int splitLine = 0;
while ((strLine = br.readLine()) != null) {
num++;
if (strLine.length() == 1) {
splitLine = num;
}
bw.write(strLine);
bw.newLine();
bw.flush();
}
if (splitLine < 60) {
log.debug("File Name" + filenames[k] + "Line Number - " + splitLine);//This gives me the correct line number where the character is for each file.
br.readLine();
}
fs.close();
br.close();
fos.close();
bw.close();
}
} catch (Exception asd) {
log.debug(asd.getMessage());
}
}
我不確定自己在做什么錯,但是在跳過之前,似乎文件已被寫入。 我該如何完成?
我通過存儲行以跳過Map中每個文件的值來解決這個問題。 然后遍歷地圖,並跳過每個文件的行數。 我認為應該有一個簡單的方法。
public static Map getSplitMap(File sourceDir) {
FilenameFilter only = new OnlyExt("RPT");
log.debug("Getting split Map........");
Map<String, Integer> map = new HashMap();
String[] filenames = sourceDir.list(only);
try {
for (int k = 0; k < filenames.length; k++) {
FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + filenames[k]);
BufferedReader br = new BufferedReader(new InputStreamReader(fs));
String strLine;
int num = 0;
int splitLine = 0;
while ((strLine = br.readLine()) != null) {
num++;
if (strLine.length() == 1) {
splitLine = num;
}
if (splitLine < 60) {
map.put(filenames[k], splitLine);
}
}
fs.close();
br.close();
}
} catch (Exception asd) {
log.debug(asd.getMessage());
}
return map;
}
然后跳過每個文件的行:
public static void splitFile(File sourceDir) {
Map<String, Integer> map = getSplitMap(sourceDir);
try {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
FileInputStream fs = new FileInputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey());
BufferedReader br = new BufferedReader(new InputStreamReader(fs));
FileOutputStream fos = new FileOutputStream(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey() + ".LST");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
for (int i = 1; i < entry.getValue(); i++) {
br.readLine();
}
String strLine;
while ((strLine = br.readLine()) != null) {
bw.write(strLine);
bw.newLine();
bw.flush();
}
fs.close();
br.close();
fos.close();
bw.close();
File files = new File(sourceDir.getAbsolutePath() + System.getProperty("file.separator") + entry.getKey());
files.delete();
}
} catch (Exception asd) {
log.debug(asd.getMessage());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.