gpt4 book ai didi

java - 稍后如何在循环中使用变量

转载 作者:行者123 更新时间:2023-12-02 07:22:42 28 4
gpt4 key购买 nike

我不确定这是否可能,而且我很新,所以希望你们中的一些人可以对此有所了解,我有一个函数可以读取 txt 文件的所有内容,然后在终端窗口中打印出来,但是我希望能够将文本文件的数据存储在变量中,以便我稍后可以使用它,这可能吗

这是代码片段:

String mText; 
while((mText = br.readLine()) != null) {
//Displays the contents of the file in terminal
System.out.println(mText);
}

因为据我了解,一旦循环完成,变量 mText 的内容在这种情况下就会被删除?

好的,因为在下面的代码中,我想打印到打印机,该文件的内容,但是当我运行它时,我可以很好地显示文件的内容,但它永远不会出现打印机选项框,我认为这会是问题所在,看起来它是我的代码中的其他内容:

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() < 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;
}
}

这是我完成的原始代码,它打印出程序中预先输入的文本,我尝试按照上面的方式添加文件阅读器,但现在它不起作用

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<String> list = new ArrayList<String>();
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() < 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;
}
}

最佳答案

as i understand it once the loop finishes the contents of the variable mText in this case gets deleted ?

如果您正在从文本文件中读取多行,则之前的所有写入都会被以下写入覆盖。所以,你的变量 mText将仅包含读取的最后一行。

如果您希望在循环结束后可以访问所有读取的行,您可以将这些行存储在某个集合中。

理想情况下,您可以创建 List<String>在这种情况下,并将您的数据存储在其中:-

List<String> list = new ArrayList<String>();
while((mText = br.readLine()) != null) {
//Displays the contents of the file in terminal
System.out.println(mText);
list.add(mText);
}

现在,在 while 循环之外,您可以从列表中访问数据。

关于java - 稍后如何在循环中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com