• 0

Java: Reading File & Loop help


Question

Hi... I'm a newbie at Java, so I was wondering if you guys could help me out...

I have txt file i'm reading scores and labels off of to make a bar graph.

First line is an integer (score), second line is the label ("Score 1"), and they alternate from then on. I have 5 scores, meaning ten lines in the txt file.

Anyway, I can read the txt file and make the bar graph perfectly, but when i make the loop, i always have to specify how many times to do the loop... I have no idea how to make it count how many items are in the txt file automatically or to stop when there are no more values.

Please help if you can :o

Here is my code for the loop area so far:

 int n = 0;
  int itemCount = 5;

  SimpleReader reader = new SimpleReader( "graphdata.dat" );

  while ( n < itemCount )
 	 {
 	 double number = reader.getInt();
 	 r = new SimpleRectangle( BAR_START, barPos, (int) number, BAR_HEIGHT );
 	 r.setColor( barColor );
 	 r.setToFill();
 	 graphWin.add( r );
 	 total = total + number;
 	 n = n + 1;
 	 barPos = barPos + BAR_HEIGHT + BAR_SPACER;

 	 String word = reader.getString();
 	 lab = new SimpleLabel( LABEL_START, labelPos, LABEL_WIDTH, LABEL_HEIGHT );
 	 lab.setText( word + ": " + (int) number );
 	 graphWin.add( lab );
 	 labelPos = labelPos + LABEL_HEIGHT + LABEL_SPACER;
 	 }
  reader.safeClose();

Link to comment
https://www.neowin.net/forum/topic/62996-java-reading-file-loop-help/
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Well, I've got no idea what SimpleReader is, but if it's extending BufferedReader, reader.ready() will say if the file is ready or not.

So:

while(reader.ready()) {
........

or

while(reader.getInt() != *numberhere*)

If it returns an error number, just put that in the *numberhere*

It's hard though not knowing what your reader does or what methods it has to read the file with.

Edited by kjordan2001
  • 0

Use BufferedReader instead and to for the this question:

"or to stop when there are no more values"

use a while loop if the following code:

while (in.readLine() != null)
{
    //Code execution here
}

This code below is what i did some while back and should give you some hints on how to implement BufferedReader:

/**
 * Read Class - A Class that Read's a Text file
 * @author Saad Mahamood 
 * @version 10/10/02 
 */

import java.io.*;

public class Read  
{

    public Read()
    {
        //Default Constructor
    }


    /**
     * textFile - This method read's a text file and output's
     *            it's content's to the terminal
     *@execption - IOException 
     */
    public void textFile() throws IOException
    {
        File aFile = new File("read.txt");

        if ((!aFile.isFile()) || (!aFile.canRead()))
        {
            // Let's leave
            throw new IOException("File not found");
        }

            
        BufferedReader in = new BufferedReader(new FileReader(aFile));
        
        
        String theString = null;

        for (int i=0;i < 26; i++ ) 
        {
            theString = in.readLine();
            System.out.println(theString);
       	 
        }


    }



	public static void main(String[] args) 
	{
  System.out.println("Reading file");
        System.out.println("***********************");
        Read aread = new Read();
        try
        {
            aread.textFile();
        }
        catch(IOException e)
        {
            System.err.println("Anption occured!");
        }

	}
}

ss1.

  • 0

try {
    BufferedReader oBuffer = new BufferedReader(new FileReader(new File("Path\to\file.txt")));
} catch (FileNotFoundException e) {
    system.out.print("FileFound");
}

String s = null;
while(true) {
    s = oBuffer.readLine();
    if (s == null) break;

    //Do your Rectangle business here
}

BTW: IF you are finding you have to create your own readers and writers and you are a newbie, then you are going down the wrong path. The book "Core Java2" from Sun Press has a good chapter that deals with the intricacies of Readers and Writers (and InputStreams and OutputStreams). I suggest you read it. It will spare you a lot of time later down the line.

Also, try not to initialize your objects inside of a loop. You have a line

String word = reader.getString();

inside your loop. That is not very efficient. While not technically wrong, it is a bad habit to get into.

FREE TIP: (and off-topic) On a related note, careful with string concatenation inside loops. You don't do it on the example you supplied, but if you are reading a file the last thing you want to do is:

String s = new String();
String temp = null;
while (true) {
    temp = oBuffer.readLine();
    if (temp == null) break;
    s += temp;
}

If you read the book above, or any text on the net, you will learn to use a StringBuffer for this kind of operation.

Edited by PeterHammer
  • 0

sorry for the lack of reply the past few days, i haven't had a chance to jump back on the computer...

thanks for all your help... I'm a total newbie to Java, and i just found out how stupid it was to post the code that I have, since I found out that SimpleReader and all that stuff were custom classes from my teacher. sorry about that.

thanks for all your help though, i got it working now =)

thanks for all your help with BifferedReader also, I think i'm gonna study up on that one more... I'll read up a bit more before I ask for the next question.

Thanks again, and I really appreciate all of your help guys. :D

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • I thought router has to have 6 Ghz band to be called wifi-7, guess I was wrong...
    • I have the Pixel 9 Pro XL...Unless this thing is "leaps and bounds" faster than the 9, I'll pass. And by leaps and bounds, I don't mean on benchmarks. "Real world" faster. Most people don't even come close to topping out the performance of their phones. Tensor G5 is Google's most powerful chip to date, boasting a staggering 36 percent performance leap over G4.
    • MIT's stunning 'bubble wrap' device squeezes water out from thin air even in deserts by Sayan Sen Image by Matteo Roman via Pexels Massachusetts Institute of Technology (MIT) engineers have built a new kind of device that can pull clean drinking water straight out of the air—no electricity needed. It’s designed for areas where water is scarce and traditional sources like rivers or lakes aren’t reliable. Right now, more than 2.2 billion people globally don’t have access to safe drinking water. In the United States alone, 46 million face water insecurity, with either no running water or water that’s not safe to drink. This new device, called an Atmospheric Water Harvesting Window (AWHW), uses a unique hydrogel panel that looks like black bubble wrap. These dome-shaped bubbles soak up water vapor from the air, especially at night when humidity is higher. During the day, sunlight makes the vapor inside evaporate. That vapor then condenses on a glass surface and drips down through a tube, turning into drinkable water. The AWHW doesn’t rely on power sources like batteries or solar panels. It’s completely passive, meaning it works on its own. The team tested a meter-sized panel in Death Valley, California, one of the driest places in North America, and got between 57.0 and 161.5 milliliters of water per day even with humidity as low as 21 percent. That’s more than what other similar passive devices have managed. “We have built a meter-scale device that we hope to deploy in resource-limited regions, where even a solar cell is not very accessible,” said Xuanhe Zhao, a professor at MIT. “It’s a test of feasibility in scaling up this water harvesting technology. Now people can build it even larger, or make it into parallel panels, to supply drinking water to people and achieve real impact.” Another cool part of the design is how they kept the water safe to drink. Usually, these kinds of hydrogels use salts like lithium chloride to absorb more vapor but that can lead to salt leaking into the water, which isn’t ideal. To solve this, MIT’s team mixed in glycerol, a compound that helps keep salt locked inside the gel. In testing, the lithium ion concentration in the harvested water stayed below 0.06 ppm (parts per million), which is way below the safe limit. The hydrogel domes also give the material more surface area, letting it collect more vapor. The outer glass panel is coated with a special polymer film that helps cool the glass, making it easier for vapor to condense. “This is just a proof-of-concept design, and there are a lot of things we can optimize,” said lead author Chang Liu, now a professor at the National University of Singapore. “For instance, we could have a multipanel design. And we’re working on a next generation of the material to further improve its intrinsic properties.” Published in Nature Water, the study says the AWHW could last at least a year and shows promise for making safe, sustainable water in places with harsh climates. The researchers believe an array of vertical panels could one day supply water to individual households, especially in remote or off-grid locations. Source: MIT News, Nature This article was generated with some help from AI and reviewed by an editor. Under Section 107 of the Copyright Act 1976, this material is used for the purpose of news reporting. Fair use is a use permitted by copyright statute that might otherwise be infringing.
    • Clear Linux is open source, indeed, so its source code is available for anyone. They're just shutting down its support from them, they're not forbidding anyone else from taking over.
    • Linux Mint is also my favorite distro, but I fear what will happen with it if Clem were to disappear tomorrow, to be honest.
  • Recent Achievements

    • First Post
      leoniDAM earned a badge
      First Post
    • Reacting Well
      Ian_ earned a badge
      Reacting Well
    • One Month Later
      Ian_ earned a badge
      One Month Later
    • Dedicated
      MacDaddyAz earned a badge
      Dedicated
    • Explorer
      cekicen went up a rank
      Explorer
  • Popular Contributors

    1. 1
      +primortal
      505
    2. 2
      ATLien_0
      209
    3. 3
      Michael Scrip
      202
    4. 4
      Xenon
      144
    5. 5
      +FloatingFatMan
      121
  • Tell a friend

    Love Neowin? Tell a friend!