从 Java 中的 txt 文件中读取
Reading from a txt file in Java
我现在正在上 C 课程,但我也想在 Java 中练习我的工作。我在读取 Java 中的文件时遇到问题(我想从文件中获取不同类型(double、int 等)并将其存储在一些变量中。我知道在 C 中,代码将是像这样:
int main(void) {
FILE* fp;
char name[29];
int qty;
char item[20];
float price;
fp= fopen("input.txt","r");
if (fp == NULL) {
printf("Couldn't open the file.");
return;
}
while (fscanf(fp, "%s %d %s %.2f\n", name, &qty, item, &price) != NULL) {
// do something
}
return 0;
}
但是 Java 呢?到目前为止,我已经这样做了,但没有用。我确实得到了输出,但格式不是我想要的。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main_Class {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = null;
try {
scan = new Scanner(new File("input.txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (scan.hasNextLine()) {
String name = "";
int quantity = 0;
String item_name = "";
double price = 0.0;
if(scan.hasNext()) {
name = scan.next();
}
if(scan.hasNextInt()) {
quantity = scan.nextInt();
}
if(scan.hasNext()) {
item_name = scan.next();
}
if(scan.hasNextDouble()) {
price = scan.nextDouble();
}
System.out.println(name + " " + quantity + " " + item_name + " " + price);
}
}
}
编辑:对不起大家,我忘了包含 txt 文件内容。我希望我的输出就像这样。
Smith 3 Sweater .50
Reich 3 Umbrella .50
Smith 1 Microwave 0.00
Lazlo 1 Mirror .00
Flintstone 5 Plate .00
Lazlo 1 Fridge 00.00
Stevenson 2 Chair 0.00
Smith 10 Candle .50
Stevenson 1 Table 0.00
Flintstone 5 Bowl .00
Stevenson 2 Clock .00
Lazlo 3 Vase .00
Stevenson 1 Couch 0.00
我的输出(在 Java 中,我只包含其中的一些,因为它们很长):
Smith 3 Sweater 0.0
.50 0 Reich 3.0
Umbrella 0 .50 0.0
Smith 1 Microwave 0.0
0.00 0 Lazlo 1.0
Mirror 0 .00 0.0
Flintstone 5 Plate 0.0
.00 0 Lazlo 1.0
if(scan.hasNextDouble())
{
price = scan.nextDouble();
}
将此更改为
price = Double.parseDouble(scan.next().substring(1));
并改变
System.out.println(name + " " + quantity + " " + item_name + " " + price);
这个到
System.out.println(name + " " + quantity + " " + item_name + " $" + price);
如果您只关心打印数据,您不妨将所有内容都作为字符串读取并将代码简化为:
while (scan.hasNextLine()) {
String name, quantity, item_name, price;
if(scan.hasNext()) {
name = scan.next();
}
else ...
if(scan.hasNext()) {
quantity = scan.nextInt();
}
else ...
if(scan.hasNext()) {
item_name = scan.next();
}
else ...
if(scan.hasNext()) {
price = scan.nextDouble();
}
else ...
System.out.println(name + "\t" + quantity + "\t" + item_name + "t" + price);
}
制表符“\t”使输出看起来更好一些。其他的地方,你可以设置默认值,以防找不到任何东西。
如果你真的关心某个东西是 int 还是 double,你可以只使用解析方法,即
int int_quantity = Integer.parseInt( quantity );
我现在正在上 C 课程,但我也想在 Java 中练习我的工作。我在读取 Java 中的文件时遇到问题(我想从文件中获取不同类型(double、int 等)并将其存储在一些变量中。我知道在 C 中,代码将是像这样:
int main(void) {
FILE* fp;
char name[29];
int qty;
char item[20];
float price;
fp= fopen("input.txt","r");
if (fp == NULL) {
printf("Couldn't open the file.");
return;
}
while (fscanf(fp, "%s %d %s %.2f\n", name, &qty, item, &price) != NULL) {
// do something
}
return 0;
}
但是 Java 呢?到目前为止,我已经这样做了,但没有用。我确实得到了输出,但格式不是我想要的。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main_Class {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = null;
try {
scan = new Scanner(new File("input.txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (scan.hasNextLine()) {
String name = "";
int quantity = 0;
String item_name = "";
double price = 0.0;
if(scan.hasNext()) {
name = scan.next();
}
if(scan.hasNextInt()) {
quantity = scan.nextInt();
}
if(scan.hasNext()) {
item_name = scan.next();
}
if(scan.hasNextDouble()) {
price = scan.nextDouble();
}
System.out.println(name + " " + quantity + " " + item_name + " " + price);
}
}
}
编辑:对不起大家,我忘了包含 txt 文件内容。我希望我的输出就像这样。
Smith 3 Sweater .50
Reich 3 Umbrella .50
Smith 1 Microwave 0.00
Lazlo 1 Mirror .00
Flintstone 5 Plate .00
Lazlo 1 Fridge 00.00
Stevenson 2 Chair 0.00
Smith 10 Candle .50
Stevenson 1 Table 0.00
Flintstone 5 Bowl .00
Stevenson 2 Clock .00
Lazlo 3 Vase .00
Stevenson 1 Couch 0.00
我的输出(在 Java 中,我只包含其中的一些,因为它们很长):
Smith 3 Sweater 0.0
.50 0 Reich 3.0
Umbrella 0 .50 0.0
Smith 1 Microwave 0.0
0.00 0 Lazlo 1.0
Mirror 0 .00 0.0
Flintstone 5 Plate 0.0
.00 0 Lazlo 1.0
if(scan.hasNextDouble())
{
price = scan.nextDouble();
}
将此更改为
price = Double.parseDouble(scan.next().substring(1));
并改变
System.out.println(name + " " + quantity + " " + item_name + " " + price);
这个到
System.out.println(name + " " + quantity + " " + item_name + " $" + price);
如果您只关心打印数据,您不妨将所有内容都作为字符串读取并将代码简化为:
while (scan.hasNextLine()) {
String name, quantity, item_name, price;
if(scan.hasNext()) {
name = scan.next();
}
else ...
if(scan.hasNext()) {
quantity = scan.nextInt();
}
else ...
if(scan.hasNext()) {
item_name = scan.next();
}
else ...
if(scan.hasNext()) {
price = scan.nextDouble();
}
else ...
System.out.println(name + "\t" + quantity + "\t" + item_name + "t" + price);
}
制表符“\t”使输出看起来更好一些。其他的地方,你可以设置默认值,以防找不到任何东西。
如果你真的关心某个东西是 int 还是 double,你可以只使用解析方法,即
int int_quantity = Integer.parseInt( quantity );