Java 从TXT文件中删除多行
我想做的是删除我的预订 保留在txt文件中看起来像这样Java 从TXT文件中删除多行,java,bufferedreader,printwriter,temporary-files,Java,Bufferedreader,Printwriter,Temporary Files,我想做的是删除我的预订 保留在txt文件中看起来像这样 08:00 Niel Butaye 1 我必须删除预订的代码是: import java.io.BufferedReader; import java.io.FileReader; import java.io.File; import java.io.FileWriter; import java.io.FileNotFoundException; import java.io.IOException; import java.io.P
08:00
Niel Butaye
1
我必须删除预订的代码是:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.FileWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class ReservatieVerwijderen {
static String naamklant="";
public ReservatieVerwijderen() {}
public void removeLineFromFile(String file, String lineToRemove) {
try {
File inFile = new File(file);
if (!inFile.isFile()) {
System.out.println("Parameter is not an existing file");
return;
}
//Maak een nieuw bestand dat later het originele bestand wordt
File tempFile = new File(inFile.getAbsolutePath() + ".tmp");
BufferedReader br = new BufferedReader(new FileReader(file));
PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
String line = null;
//Lees het originele bestand en schrijf naar het tijdelijke bestand
//Als de lijn == de lijn die we zoeken schrijven we dit niet over
while ((line = br.readLine()) != null) {
if (!line.trim().equals(lineToRemove)) {
pw.println(line);
pw.flush();
}
}
pw.close();
br.close();
//Verwijder het originele bestand
if (!inFile.delete()) {
System.out.println("Could not delete file");
return;
}
//Hernoem het tijdelijke bestand naar het originele
if (!tempFile.renameTo(inFile))
System.out.println("Could not rename file");
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
ReservatieVerwijderen util = new ReservatieVerwijderen();
SimpleInOutDialog input = new SimpleInOutDialog("Reserveringen");
naamklant = input.readString("Geef de volledige naam in");
util.removeLineFromFile("L:\\Documents/Informatica/6de jaar/GIP/Reserveringen.txt", naamklant);
}
}
它只删除了预订者的姓名,我还需要删除时间(08:00)和预订种类(1)。有什么帮助吗
public class SimpleInOutDialog {
private String titel;
/**
* Constructor van een SimpleInOutDialog.
*
* @param titel een String met de titel van het venstertje.
*/
public SimpleInOutDialog(String titel) {
this.titel = titel;
}
/**
* Tonen van een tekst in een dialoogvenstertje.
* @param message een String met een te tonen berichtje.
* @param output een String met de te tonen tekst.
*/
/**
*
* @param
*/
public void showString(String message, String output) {
JOptionPane.showMessageDialog(
null,
message + "\n\n" + output + "\n\n",
titel,
JOptionPane.PLAIN_MESSAGE);
}
/**
* Tonen van een geheel getal in een dialoogvenstertje.
* @param message een String met een te tonen berichtje.
* @param een int met het te tonen getal.
*/
public void showInteger(String message, int getal) {
JOptionPane.showMessageDialog(
null,
message + "\n\n" + Integer.toString(getal) + "\n\n",
titel,
JOptionPane.PLAIN_MESSAGE);
}
/**
* Tonen van een geheel getal in een dialoogvenstertje.
* @param message een String met een te tonen berichtje.
* @param een double met het te tonen getal.
*/
public void showDouble(String message, double getal) {
JOptionPane.showMessageDialog(
null,
message + "\n\n" + Double.toString(getal) + "\n\n",
titel,
JOptionPane.PLAIN_MESSAGE);
}
/**
* Inlezen van een String.
* @param message een String met de tekst die in het dialoogvenster
* moet getoond worden.
* @return de ingelezen String. Indien het venster zonder
* invoer wordt afgesloten is de String null.
*/
public String readString(String message) {
Object[] possibilities = null;
String s = null;
s =
(String) JOptionPane.showInputDialog(
null,
message,
this.titel,
JOptionPane.PLAIN_MESSAGE,
null,
possibilities,
"");
if ((s == null) || (s.length() == 0)) {
s = null;
}
return s;
}
/**
* Inlezen van een geheel getal.
* @param message een String met de tekst die in het dialoogvenster
* moet getoond worden.
* @return het ingelezen geheel getal (een int). Indien het venster zonder
* correcte invoer wordt afgesloten is het getal 0 (nul).
*/
public int readInteger(String message) {
boolean isAnInteger = false;
String tekst = null;
int gelezen = 0;
while (!isAnInteger) {
tekst = readString(message);
if (tekst != null) {
try {
gelezen = Integer.parseInt(tekst);
isAnInteger = true;
} catch (NumberFormatException nfe) {
isAnInteger = false;
}
} else {
isAnInteger = true;
gelezen = 0;
}
}
return gelezen;
}
/**
* Inlezen van een kommagetal.
* @param message een String met de tekst die in het dialoogvenster
* moet getoond worden.
* @return het ingelezen getal (een double). Indien het venster zonder
* correcte invoer wordt afgesloten is het getal 0.0 (nul).
*/
public double readDouble(String message) {
boolean isADouble = false;
String tekst = null;
double gelezen = 0.0;
while (!isADouble) {
tekst = readString(message);
if (tekst != null) {
try {
gelezen = Double.parseDouble(tekst);
isADouble = true;
} catch (NumberFormatException nfe) {
isADouble = false;
}
} else {
isADouble = true;
gelezen = 0.0;
}
}
return gelezen;
}
/**
* Wanneer je in je programma geen uitvoer meer nodig hebt
* MOET je deze bewerking op het SimpleInOutDialog-object uitvoeren.
* Het programma wordt dan beëindigd.
*/
public void stop() {
System.exit(0);
}
}
我建议在预订的开始和结束处放置一个类似$$的标记,以便在为其创建文件时删除或排序标记(如果可能)。如果保留在文件中的位置相同,则始终可以遍历文件并检查需要删除的行 您从这里获取了需要删除字符串作为参数的代码。 因此,您必须事先知道必须删除哪条精确的线 编辑: 输入文件
08:00
Niel Butaye
1
09:00
dean koontz
1
10:00
stephen king
1
希望对您有所帮助。我建议您在预订的开始和结束处放置一个类似$$的标记,以便在为其创建文件时删除或排序标记(如果可能)。如果保留在文件中的位置相同,则始终可以遍历文件并检查需要删除的行 您从这里获取了需要删除字符串作为参数的代码。 因此,您必须事先知道必须删除哪条精确的线 编辑: 输入文件
08:00
Niel Butaye
1
09:00
dean koontz
1
10:00
stephen king
1
希望它能有所帮助。尽管像您这样将预订实体存储在文本文件中不是一种安全的好方法,但我已经调试了与操作文本文件相关的代码。在
removeLineFromFile()
方法中,将while循环更改为下面的代码,即可完成
boolean go = true;
while ( go )
{
String temp = "";
for ( int i = 0; i < 3; i++ )
{
line = br.readLine();
if ( line != null )
temp += line + "\n";
else
go = false;
}
if ( !temp.trim().contains( lineToRemove ) )
{
pw.print( temp );
pw.flush();
}
}
boolean go=true;
while(go)
{
字符串temp=“”;
对于(int i=0;i<3;i++)
{
line=br.readLine();
如果(行!=null)
温度+=行+“\n”;
其他的
go=假;
}
如果(!temp.trim()包含(lineToRemove))
{
印刷(温度);
pw.flush();
}
}
尽管像您这样将预订实体存储在文本文件中不是一种安全的好方法,但我已经调试了与操作文本文件相关的代码。在removeLineFromFile()
方法中,将while循环更改为下面的代码,即可完成
boolean go = true;
while ( go )
{
String temp = "";
for ( int i = 0; i < 3; i++ )
{
line = br.readLine();
if ( line != null )
temp += line + "\n";
else
go = false;
}
if ( !temp.trim().contains( lineToRemove ) )
{
pw.print( temp );
pw.flush();
}
}
boolean go=true;
while(go)
{
字符串temp=“”;
对于(int i=0;i<3;i++)
{
line=br.readLine();
如果(行!=null)
温度+=行+“\n”;
其他的
go=假;
}
如果(!temp.trim()包含(lineToRemove))
{
印刷(温度);
pw.flush();
}
}
如果您以完全保留的方式而不是以单独的行来思考,您会得到更清晰的代码:
void deleteReservations(String reservationName, BufferedReader input,
PrintWriter output) throws IOException {
String date;
while ((date = input.readLine()) != null) {
String name = input.readLine();
String tickets = input.readLine();
// You can check any part of a reservation here
// to figure out wether to keep or delete it.
if (!name.equals(reservationName)) {
output.println(date);
output.println(name);
output.println(tickets);
}
}
}
对于不遵循3行块格式的文件,这显然会失败,但是,文件仍然会被破坏
基于Sergey Brenner回答的样本输入:
08:00
Niel Butaye
1
09:00
dean koontz
2
10:00
stephen king
3
给定名称dean koontz
输出:
08:00
Niel Butaye
1
10:00
stephen king
3
如果您以完全保留而不是单独的行进行思考,您将获得更清晰的代码:
void deleteReservations(String reservationName, BufferedReader input,
PrintWriter output) throws IOException {
String date;
while ((date = input.readLine()) != null) {
String name = input.readLine();
String tickets = input.readLine();
// You can check any part of a reservation here
// to figure out wether to keep or delete it.
if (!name.equals(reservationName)) {
output.println(date);
output.println(name);
output.println(tickets);
}
}
}
对于不遵循3行块格式的文件,这显然会失败,但是,文件仍然会被破坏
基于Sergey Brenner回答的样本输入:
08:00
Niel Butaye
1
09:00
dean koontz
2
10:00
stephen king
3
给定名称dean koontz
输出:
08:00
Niel Butaye
1
10:00
stephen king
3
下面的示例可以轻松地从文本文件中删除多行 输入文件名 输入第一行编号: 输入要删除的行数 在注释下查看下面的示例
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class RemoveLines
{
public static void main(String[] args)
{
//Enter name of the file here
String filename="foobar.txt";
//Enter starting line here
int startline=1;
//Enter number of lines here.
int numlines=2;
RemoveLines now=new RemoveLines();
now.delete(filename,startline,numlines);
}
void delete(String filename, int startline, int numlines)
{
try
{
BufferedReader br=new BufferedReader(new FileReader(filename));
//String buffer to store contents of the file
StringBuffer sb=new StringBuffer("");
//Keep track of the line number
int linenumber=1;
String line;
while((line=br.readLine())!=null)
{
//Store each valid line in the string buffer
if(linenumber<startline||linenumber>=startline+numlines)
sb.append(line+"\n");
linenumber++;
}
if(startline+numlines>linenumber)
System.out.println("End of file reached.");
br.close();
FileWriter fw=new FileWriter(new File(filename));
//Write entire string buffer into the file
fw.write(sb.toString());
fw.close();
}
catch (Exception e)
{
System.out.println("Something went horribly wrong: "+e.getMessage());
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.FileWriter;
公共类移除
{
公共静态void main(字符串[]args)
{
//在此处输入文件名
字符串filename=“foobar.txt”;
//在这里输入起跑线
int=1;
//在此处输入行数。
int numlines=2;
RemoveLines now=新的RemoveLines();
立即删除(文件名、startline、numlines);
}
void delete(字符串文件名、整数行、整数行)
{
尝试
{
BufferedReader br=新的BufferedReader(新文件读取器(文件名));
//用于存储文件内容的字符串缓冲区
StringBuffer sb=新的StringBuffer(“”);
//记下电话号码
int linenumber=1;
弦线;
而((line=br.readLine())!=null)
{
//将每个有效行存储在字符串缓冲区中
if(线号=直线+多直线)
sb.追加(第+行“\n”);
linenumber++;
}
if(直线+多直线>线号)
System.out.println(“到达文件末尾”);
br.close();
FileWriter fw=新的FileWriter(新文件(文件名));
//将整个字符串缓冲区写入文件
fw.写(sb.toString());
fw.close();
}
捕获(例外e)
{
println(“发生了可怕的错误:+e.getMessage());
}
}
下面的示例可以轻松地从文本文件中删除多行
输入文件名
输入第一行编号:
输入要删除的行数
在注释下查看下面的示例
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class RemoveLines
{
public static void main(String[] args)
{
//Enter name of the file here
String filename="foobar.txt";
//Enter starting line here
int startline=1;
//Enter number of lines here.
int numlines=2;
RemoveLines now=new RemoveLines();
now.delete(filename,startline,numlines);
}
void delete(String filename, int startline, int numlines)
{
try
{
BufferedReader br=new BufferedReader(new FileReader(filename));
//String buffer to store contents of the file
StringBuffer sb=new StringBuffer("");
//Keep track of the line number
int linenumber=1;
String line;
while((line=br.readLine())!=null)
{
//Store each valid line in the string buffer
if(linenumber<startline||linenumber>=startline+numlines)
sb.append(line+"\n");
linenumber++;
}
if(startline+numlines>linenumber)
System.out.println("End of file reached.");
br.close();
FileWriter fw=new FileWriter(new File(filename));
//Write entire string buffer into the file
fw.write(sb.toString());
fw.close();
}
catch (Exception e)
{
System.out.println("Something went horribly wrong: "+e.getMessage());
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.FileWriter;
公共类移除
{
公共静态void main(字符串[]args)
{
//在此处输入文件名
字符串filename=“foobar.txt”;
//在这里输入起跑线
int=1;
//在此处输入行数。
int numlines=2;
RemoveLines now=新的RemoveLines();
立即删除(文件名、startline、numlines);
}
void delete(字符串文件名、整数行、整数行)
{
尝试
{
BufferedReader br=新的BufferedReader(新文件读取器(文件名));
//用于存储文件内容的字符串缓冲区
StringBuffer sb=新的StringBuffer(“”);
//记下电话号码
int linenumber=1;
弦线;
而((行=br.r