java修改文本文件_在Java中读取和修改文本文件中的文本

我为你编写了一个快速方法,我认为你做了你想要的,即删除一行中所有出现的令牌,其中该令牌嵌入在行中并由前导短划线标识。

该方法在编辑令牌后读取文件并将其直接写入文件。这将允许您处理一个巨大的文件,而不必担心内存限制。

您可以在成功编辑后重命名输出文件。我会把它留给你来解决这个问题。

如果你觉得你真的必须在内存管理中使用字符串缓冲区,那么从我的方法中获取行编辑的逻辑并修改它以使用字符串缓冲区。

static void onePassReadEditWrite(final String inputFilePath, final String outputPath)

{

// the input file

Scanner inputScanner = null;

// output file

FileWriter outputWriter = null;

try

{

// open the input file

inputScanner = new Scanner(new File(inputFilePath));

// open output file

File outputFile = new File(outputPath);

outputFile.createNewFile();

outputWriter = new FileWriter(outputFile);

try

{

for (

String lineToEdit = inputScanner.nextLine();

/*

* NOTE: when this loop attempts to read beyond EOF it will throw the

* java.util.NoSuchElementException exception which is caught in the

* containing try/catch block.

*

* As such there is NO predicate required for this loop.

*/;

lineToEdit = inputScanner.nextLine()

)

// scan all lines from input file

{

System.out.println("START LINE [" + lineToEdit + "]");

// get position of dash in line

int dashInLinePosition = lineToEdit.indexOf('-');

while (dashInLinePosition != -1)

// this line has needs editing

{

// split line on dash

String halfLeft = lineToEdit.substring(0, dashInLinePosition);

String halfRight = lineToEdit.substring(dashInLinePosition + 1);

// get token after dash that is to be removed from whole line

String tokenToRemove = halfRight.substring(0, 2);

// reconstruct line from the 2 halves without the dash

StringBuilder sb = new StringBuilder(halfLeft);

sb.append(halfRight.substring(0));

lineToEdit = sb.toString();

// get position of first token in line

int tokenInLinePosition = lineToEdit.indexOf(tokenToRemove);

while (tokenInLinePosition != -1)

// do for all tokens in line

{

// split line around token to be removed

String partLeft = lineToEdit.substring(0, tokenInLinePosition);

String partRight = lineToEdit.substring(tokenInLinePosition + tokenToRemove.length());

if ((!partRight.isEmpty()) && (partRight.charAt(0) == ','))

// remove prefix comma from right part

{

partRight = partRight.substring(1);

}

// reconstruct line from the left and right parts

sb.setLength(0);

sb = new StringBuilder(partLeft);

sb.append(partRight);

lineToEdit = sb.toString();

// find next token to be removed from line

tokenInLinePosition = lineToEdit.indexOf(tokenToRemove);

}

// handle additional dashes in line

dashInLinePosition = lineToEdit.indexOf('-');

}

System.out.println("FINAL LINE [" + lineToEdit + "]");

// write line to output file

outputWriter.write(lineToEdit);

outputWriter.write("\r\n");

}

}

catch (java.util.NoSuchElementException e)

// end of scan

{

}

finally

// housekeeping

{

outputWriter.close();

inputScanner.close();

}

}

catch(FileNotFoundException e)

{

e.printStackTrace();

}

catch(IOException e)

{

inputScanner.close();

e.printStackTrace();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值