我正试图从缓冲的文本文件中构建一个数组。该类由另一个具有main方法的类使用。我所拥有的只是打印文件。。。我需要的是一个字符串数组,逐行构建,镜像文本文件。然后,我需要能够使用用户输入的字符串(该部分也将在主方法中)来搜索该数组,该字符串将命名产品,并找到相应的价格。我不能使用ArrayList、Maps、Vectors等。这是在Java8中。/***一个使用BufferedReader从vmMix1文本文件读取库存的类*@作者Michelle Merritt*/
import java.io.*;
public class VendingMachine1
{
BufferedReader inInvFile1 = new BufferedReader(
new FileReader("vmMix1.txt"))
/**
* A method to print vending machine 1 inventory
*/
public void printVM1()
{
try
{
String vm1Line;
while((vm1Line = inInvFile1.readLine()) != null)
{
// This is what I was using for now to simply print my file
System.out.println(vm1Line);
}
}
catch(IOException e)
{
System.out.println("I/O Error: " + e);
}
}
}
这是创建文本文件的代码,因为我似乎看不到如何附加文本文件。/***创建自动售货机#1中的库存的类,使用*PrintWriter流。*@作者Michelle Merritt*/
import java.io.*;
public class VMMix1
{
public static void main(String[] args)
{
String [] product = {"Coke", "Dr. Pepper", "Sprite", "RedBull",
"Cool Ranch Doritos", "Lay's Potato Chips",
"Pretzels", "Almonds", "Snickers", "Gummi Bears",
"Milky Way", "KitKat"};
String [] packaging = {"bottle", "can", "can", "can", "bag", "bag",
"bag", "bag", "wrapper", "bag", "wrapper",
"wrapper"};
float [] price = {2.25f, 1.75f, 1.75f, 2.00f, 1.00f, 1.00f, 0.75f, 1.50f,
1.25f, 1.00f, 1.25f, 1.25f};
int [] quantity = {10, 10, 10, 12, 8, 10, 12, 9, 7, 11, 10, 8};
try(PrintWriter outFile = new PrintWriter("vmMix1.txt"))
{
for (int index = 0; index < product.length; index++)
{
outFile.printf("%-18s %-10s: $%.2f qty: %3dn", product[index],
packaging[index], price[index], quantity[index]);
}
}
catch (IOException except)
{
System.out.println("IOException: " + except.getMessage());
}
}
}
我需要这个东西充满活力。随着程序的运行,购买了一些东西,我将不得不考虑库存的损失和自动售货机中的货币数量的变化(还有另一种货币类别,可以容纳大量面额的货币)。我必须维护数组中的值,并重新打印更新后的数组。非常感谢您的帮助。
您可以使用Java8流API
String[] array = reader.lines().toArray(String[]::new);
您甚至可以使用跳过缓冲区创建
try (Stream<String> stream = Files.lines(Paths.get("vmMix1.txt"))) {
String [] array = stream.toArray(String[]::new);
}
在Java8之前,最短的方法之一可能是将整个文件读取为字符串,并将其拆分(将读取器读取为字符串的方法可以在这里找到):
String[] array = fileAsString.split('\n');
当然,您也可以在循环中构建数组,并使用System.arraypy为每一行增加数组(在这种情况下可能会很慢)。
String[] array = new String[0];
while((vm1Line = inInvFile1.readLine()) != null) {
String[] newArray = new String[array.length + 1];
System.arraycopy(array, 0, newArray, 0, array.length);
newArray[array.length] = vm1Line;
array = newArray;
}
您可以优化这种方法,首先创建一个更大的数组,填充行,根据需要增加数组的大小(使用arraypy),最后将数组缩小到写入的行数。这或多或少就是数组列表的作用。因此,如果您可能使用collections api,您可以简单地执行
List<String> list = new ArrayList<>();
while((vm1Line = inInvFile1.readLine()) != null) {
list.add(vm1Line);
}
String[] array = list.toArray(new String[list.size()]);
希望它能有所帮助。
Stream<String> lines = Files.lines(Paths.get("C:/SelfStudy/Input.txt"));
String[] array = lines.toArray(String[]::new);