Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to use a variable in a loop later on
    text
    copied!<p>Im not sure if this is possible and im very new so hopefully some of you can shed some light on this, i have a function that reads all the contents of a txt file then prints this out in a terminal window, however i want to be able to store the data of the text file in a variable so i can use it later on is this possible </p> <p>heres the snip bit of code :</p> <pre><code>String mText; while((mText = br.readLine()) != null) { //Displays the contents of the file in terminal System.out.println(mText); } </code></pre> <p>becuase as i understand it once the loop finishes the contents of the variable mText in this case gets deleted ?</p> <p>ok becuase in my code below, i am wanting to print out to a printer, the contents of that file but when i run it, i can display the contents of the file just fine but it never comes up with printer option box, i thought this would be the problem, it looks like it is something else in my code :</p> <pre><code>import java.awt.*; import java.awt.font.*; import java.awt.geom.*; import java.awt.print.*; import java.text.*; import java.io.*; import javax.swing.*; public class PrintText implements Printable { private static String mText; // Below the code will allow the user to select a file and then print out the contents of the file public static void main(String[] args) throws IOException { //selects the file JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File file = chooser.getSelectedFile(); String filename = file.getName(); //System.out.println("You have selected: " + filename); testing to see if file seleected was right String path = file.getAbsolutePath(); //Reads contents of file into terminal //FileReader fr = new FileReader("filename"); // FileReader fr = new FileReader("D:/Documents/" + "filename")); FileReader fr = new FileReader(path); BufferedReader br = new BufferedReader(fr); String mText; while((mText = br.readLine()) != null) { //Displays the contents of the file in terminal System.out.println(mText); } //fr.close(); } //private static final String mText = // "This is a test to see if this text will be printed "; //This works perfectly fine AttributedString mStyledText = new AttributedString(mText); /** * Print a single page containing some sample text. */ static public void printer(String args[]) { /* Get the representation of the current printer and * the current print job. */ PrinterJob printerJob = PrinterJob.getPrinterJob(); /* Build a book containing pairs of page painters (Printables) * and PageFormats. This example has a single page containing * text. */ Book book = new Book(); book.append(new PrintText(), new PageFormat()); /* Set the object to be printed (the Book) into the PrinterJob. * Doing this before bringing up the print dialog allows the * print dialog to correctly display the page range to be printed * and to dissallow any print settings not appropriate for the * pages to be printed. */ printerJob.setPageable(book); /* Show the print dialog to the user. This is an optional step * and need not be done if the application wants to perform * 'quiet' printing. If the user cancels the print dialog then false * is returned. If true is returned we go ahead and print. */ boolean doPrint = printerJob.printDialog(); if (doPrint) { try { printerJob.print(); } catch (PrinterException exception) { System.err.println("Printing error: " + exception); } } } /** * Print a page of text. */ public int print(Graphics g, PageFormat format, int pageIndex) { /* We'll assume that Jav2D is available. */ Graphics2D g2d = (Graphics2D) g; /* Move the origin from the corner of the Paper to the corner * of the imageable area. */ g2d.translate(format.getImageableX(), format.getImageableY()); /* Set the text color. */ g2d.setPaint(Color.black); /* Use a LineBreakMeasurer instance to break our text into * lines that fit the imageable area of the page. */ Point2D.Float pen = new Point2D.Float(); AttributedCharacterIterator charIterator = mStyledText.getIterator(); LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext()); float wrappingWidth = (float) format.getImageableWidth(); while (measurer.getPosition() &lt; charIterator.getEndIndex()) { TextLayout layout = measurer.nextLayout(wrappingWidth); pen.y += layout.getAscent(); float dx = layout.isLeftToRight()? 0 : (wrappingWidth - layout.getAdvance()); layout.draw(g2d, pen.x + dx, pen.y); pen.y += layout.getDescent() + layout.getLeading(); } return Printable.PAGE_EXISTS; } } </code></pre> <p>This is the original code i have done, it prints out a pre typed in text in the program, i have tried to add the file reader in as above and now it does not work</p> <pre><code>import java.awt.*; import java.awt.font.*; import java.awt.geom.*; import java.awt.print.*; import java.text.*; import java.io.*; import javax.swing.*; import java.util.List; import java.util.ArrayList; public class PrintText implements Printable { /** private static String mText; // Below the code will allow the user to select a file and then print out the contents of the file public static void main(String[] args) throws IOException { //selects the file JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File file = chooser.getSelectedFile(); String filename = file.getName(); //System.out.println("You have selected: " + filename); testing to see if file seleected was right String path = file.getAbsolutePath(); //Reads contents of file into terminal //FileReader fr = new FileReader("filename"); // FileReader fr = new FileReader("D:/Documents/" + "filename")); FileReader fr = new FileReader(path); BufferedReader br = new BufferedReader(fr); List&lt;String&gt; list = new ArrayList&lt;String&gt;(); while((mText = br.readLine()) != null) { //Displays the contents of the file in terminal System.out.println(mText); list.add(mText); } //fr.close(); } */ private static final String mText = "This is a test to see if this text will be printed "; //This works perfectly fine AttributedString mStyledText = new AttributedString(mText); /** * Print a single page containing some sample text. */ static public void main(String args[]) { /* Get the representation of the current printer and * the current print job. */ PrinterJob printerJob = PrinterJob.getPrinterJob(); /* Build a book containing pairs of page painters (Printables) * and PageFormats. This example has a single page containing * text. */ Book book = new Book(); book.append(new PrintText(), new PageFormat()); /* Set the object to be printed (the Book) into the PrinterJob. * Doing this before bringing up the print dialog allows the * print dialog to correctly display the page range to be printed * and to dissallow any print settings not appropriate for the * pages to be printed. */ printerJob.setPageable(book); /* Show the print dialog to the user. This is an optional step * and need not be done if the application wants to perform * 'quiet' printing. If the user cancels the print dialog then false * is returned. If true is returned we go ahead and print. */ boolean doPrint = printerJob.printDialog(); if (doPrint) { try { printerJob.print(); } catch (PrinterException exception) { System.err.println("Printing error: " + exception); } } } /** * Print a page of text. */ public int print(Graphics g, PageFormat format, int pageIndex) { /* We'll assume that Jav2D is available. */ Graphics2D g2d = (Graphics2D) g; /* Move the origin from the corner of the Paper to the corner * of the imageable area. */ g2d.translate(format.getImageableX(), format.getImageableY()); /* Set the text color. */ g2d.setPaint(Color.black); /* Use a LineBreakMeasurer instance to break our text into * lines that fit the imageable area of the page. */ Point2D.Float pen = new Point2D.Float(); AttributedCharacterIterator charIterator = mStyledText.getIterator(); LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext()); float wrappingWidth = (float) format.getImageableWidth(); while (measurer.getPosition() &lt; charIterator.getEndIndex()) { TextLayout layout = measurer.nextLayout(wrappingWidth); pen.y += layout.getAscent(); float dx = layout.isLeftToRight()? 0 : (wrappingWidth - layout.getAdvance()); layout.draw(g2d, pen.x + dx, pen.y); pen.y += layout.getDescent() + layout.getLeading(); } return Printable.PAGE_EXISTS; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload