Solved

Removing a line from file

Posted on 2004-10-04
11
227 Views
Last Modified: 2010-03-31
If I have a file named book.java

and it contains:

book1
book2
book3

now I want to remove book2 so that there's no blank line:

book1
book3

how can I do that? Thanks!
0
Comment
Question by:izomax
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
11 Comments
 
LVL 92

Expert Comment

by:objects
ID: 12222731
you'll have to create a new file and write the lines you want to save to the new file and then once done replace the existing file with the new one

0
 

Author Comment

by:izomax
ID: 12222781
Does that mean I have to use RandomAccessFile?
0
 
LVL 92

Expert Comment

by:objects
ID: 12222835
No RAF won't help, it only allow you to overwrite data.
It doesn't let you remove data, or insert data.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 12222851
No. You'll have to read in all the data, cut out what you don't want, and then output the whole string. Note, if you want to keep your line breaks, use BufferedReader.readLine() and append a "\n" to each line read in. To cut out the data:
int cutPoint = wholeString.indexOf(String stringToCut);
finalString = wholeString.substring(0, cutPoint) + wholeString.substring((cutPoint + 1), wholeString.length());

Then just output finalString to the file (make sure to overwrite).
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 12222874
Errr... Oops. Don't declare the stringToCut in the indexOf...

This:
int cutPoint = wholeString.indexOf(String stringToCut);
should be this:
int cutPoint = wholeString.indexOf(stringToCut);

Oh, and add in after that line:
if (cutPoint == -1){//Error message followed by System.exit(0) or something as a value of -1 will screw up the substring
}

P.S. I assume that all the strings I used were declared earlier. If not, declare them, i.e. String finalString...
0
 
LVL 5

Expert Comment

by:Naeemg
ID: 12224690
use this code. As u've to replace "book2" value with "" empty. and also u've to remove leading new line "\n" char. U'll get ur desired result. Try this code.

    String thisText = "book1\nbook2\nbook3";
    String strRemove = "book2";
    String result = "";
    result = thisText.replaceAll("\n" + strRemove,"");
    System.out.println(thisText);
    System.out.println(result);


bye,
Naeem Shehzad Ghuman
0
 
LVL 3

Accepted Solution

by:
CI-Ia0s earned 500 total points
ID: 12233317
Gah, I just realized another small bug with my code; here's the correct version:

int cutPoint = wholeString.indexOf(stringToCut);
finalString = wholeString.substring(0, cutPoint) + wholeString.substring((cutPoint + cutPoint.length()), wholeString.length());

Note that since you append "\n" to your inputs (demoed below) you'll need to include "\n" at the end of stringToCut. Now, input:

String wholeString = "";
try{
BufferedReader streamIn = new BufferedReader(new FileReader("fileName.txt"));
String inString = "";
while (inString != null){
wholeString = wholeString + inString + "\n";
inString = streamIn.readLine();
}
catch (Exception e){
System.out.println("Bad file input.");
System.exit(1);
}
0
 
LVL 92

Expert Comment

by:objects
ID: 12233363
File f = new File("book.java");
File newf = new File("book.java.new");
BufferedReader in = new BufferedReader(new FileReader(f));
PrintWriter out = new PrintWriter(new FileWriter(newf));
String line = null;
while (null!=(line=in.readLine()))
{
   if (!line.equals("book2"))
   {
      out.println(line);
   }
}
in.close();
out.close();
f.delete();
newf.renameTo(f);
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 12233392
Yea... That'd work too. ;)
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 12233395
So you have your pick of 3 methods, izomax...
0
 
LVL 3

Expert Comment

by:CI-Ia0s
ID: 12255555
Thank you. :)
0

Featured Post

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Certificat to iSeries KeyStore 1 30
ejb example issues 3 88
What browser will run Java? 7 171
Is there a Google Voice API? 9 69
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
The viewer will learn how to implement Singleton Design Pattern in Java.
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
Suggested Courses

732 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question