我要做的是删除我所做的预订 预约在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.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);
}
}
答案 0 :(得分: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();
}
}
答案 1 :(得分:1)
如果您考虑完整的预订而不是单独的行,您可以获得更清晰的代码:
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
答案 2 :(得分:0)
我建议在预订的开头和结尾添加一个像$$这样的标记,以便在为其创建文件时删除或排序标记。如果文件中预留的位置始终相同,您可以遍历文件并检查要删除的所需行。
您已从此处http://www.javadb.com/remove-a-line-from-a-text-file获取了代码,该代码需要删除字符串作为参数。 因此,您必须事先知道必须删除哪条确切的行。
编辑:
输入文件
08:00
Niel Butaye
1
09:00
dean koontz
1
10:00
stephen king
1
public static int findLineToDelete(String file, String lineToRemove) {
int lineFound=0;
try {
File inFile = new File(file);
if (!inFile.isFile()) {
System.out.println("Parameter is not an existing file");
return -1;
}
BufferedReader br = new BufferedReader(new FileReader(file));
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
int i=0;
while ((line = br.readLine()) != null) {
i++;
if (line.trim().equals(lineToRemove)) {
System.out.println(i);
lineFound=i;
}
}
br.close();
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
return lineFound;
}
public static void removeNthLine(String f, int toRemove) throws IOException {
File tmp = File.createTempFile("tmp", "");
BufferedReader br = new BufferedReader(new FileReader(f));
BufferedWriter bw = new BufferedWriter(new FileWriter(tmp));
int i=0;
String l=null;
System.out.println("toRemmove"+toRemove);
while (null != (l = br.readLine())){
i++;
if(i!=toRemove-1&&i!=toRemove&&i!=toRemove+1){
System.out.println(l);
bw.write(String.format("%s%n", l));
}
}
br.close();
bw.close();
File oldFile = new File(f);
if (oldFile.delete())
tmp.renameTo(oldFile);
}
public static void main(String[] args) {
int found = findLineToDelete("a.txt", "dean koontz");
System.out.println(found);
try{
removeNthLine("a.txt",found);
}catch(Exception e){e.printStackTrace();}
}
希望它有助于升技。
答案 3 :(得分:-1)
下面的示例可以轻松地从文本文件中删除多行。
输入文件名。
输入第一行编号:
输入no。你要删除的行。
在评论下检查以下示例!
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());
}
}