从文本文件中读取并存储特定值
Reading from a text file and storing specific values
基本上我下面的代码目前确实是从文本文件中读取的,但我想要它做的是存储一个值,以便我以后可以将它用于另一个功能。因此,我想从文本文件中存储身高 (175) 和体重 (80) 值。怎么做到的?
文本文件:
Name: ..........
Height: 175
Weight 80
主要活动:
package com.example.readfromfiletest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
Button b_read;
TextView tv_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_read = (Button) findViewById(R.id.b_read);
tv_text = (TextView) findViewById(R.id.tv_text);
b_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = "";
try {
InputStream is = getAssets().open("test.txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
text = new String(buffer);
} catch (IOException ex) {
ex.printStackTrace();
}
tv_text.setText(text);
}
});
}
}
从您的评论来看,您似乎在问如何正确地将值读入不同的变量,而不是将它们读入一个 String
。我认为你应该做的第一件事就是用 BufferedReader
逐行读取文件。然后对于您读入的每一行,您可以确定要将值分配给哪个变量。例如,您可以这样做:
Button b_read;
TextView tv_text;
String name = "";
int height = 0;
int weight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_read = (Button) findViewById(R.id.b_read);
tv_text = (TextView) findViewById(R.id.tv_text);
b_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = "";
try {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(getAssets().open("test.txt")));
String line;
while((line = bufferedReader.readLine()) != null){
text = text.concat(line + "\n");
String[] lineVals = line.split(":");
if(lineVals[0].equalsIgnoreCase("name")){
name = lineVals[1].trim();
} else if(lineVals[0].equalsIgnoreCase("height")){
height = Integer.parseInt(lineVals[1].trim());
} else if(lineVals[0].equalsIgnoreCase("weight")){
weight = Integer.parseInt(lineVals[1].trim());
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
tv_text.setText(text);
}
});
}
BufferedReader
一次读一行。例如,"Height: 175"
然后在“:”处拆分该行,返回具有两个值的 String[]
。继续我们的高度示例,数组看起来像这样:["Height", " 175"]
if 语句(也可以是 case 语句)然后确定我们是在处理姓名、身高还是体重变量。
然后将该值分配给其适当的变量。 trim()
方法在这个赋值过程中被调用以删除冒号后的 space。您也可以通过对“:”执行 split()
方法来规避此问题。
您也可以坚持使用当前的方法并进行一些 String
涉及拆分、Regex 或其他方法的操作,但我认为我提出的解决方案会更容易 read/work 在未来。
基本上我下面的代码目前确实是从文本文件中读取的,但我想要它做的是存储一个值,以便我以后可以将它用于另一个功能。因此,我想从文本文件中存储身高 (175) 和体重 (80) 值。怎么做到的?
文本文件:
Name: ..........
Height: 175
Weight 80
主要活动:
package com.example.readfromfiletest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
Button b_read;
TextView tv_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_read = (Button) findViewById(R.id.b_read);
tv_text = (TextView) findViewById(R.id.tv_text);
b_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = "";
try {
InputStream is = getAssets().open("test.txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
text = new String(buffer);
} catch (IOException ex) {
ex.printStackTrace();
}
tv_text.setText(text);
}
});
}
}
从您的评论来看,您似乎在问如何正确地将值读入不同的变量,而不是将它们读入一个 String
。我认为你应该做的第一件事就是用 BufferedReader
逐行读取文件。然后对于您读入的每一行,您可以确定要将值分配给哪个变量。例如,您可以这样做:
Button b_read;
TextView tv_text;
String name = "";
int height = 0;
int weight = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_read = (Button) findViewById(R.id.b_read);
tv_text = (TextView) findViewById(R.id.tv_text);
b_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String text = "";
try {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(getAssets().open("test.txt")));
String line;
while((line = bufferedReader.readLine()) != null){
text = text.concat(line + "\n");
String[] lineVals = line.split(":");
if(lineVals[0].equalsIgnoreCase("name")){
name = lineVals[1].trim();
} else if(lineVals[0].equalsIgnoreCase("height")){
height = Integer.parseInt(lineVals[1].trim());
} else if(lineVals[0].equalsIgnoreCase("weight")){
weight = Integer.parseInt(lineVals[1].trim());
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
tv_text.setText(text);
}
});
}
BufferedReader
一次读一行。例如,"Height: 175"
然后在“:”处拆分该行,返回具有两个值的 String[]
。继续我们的高度示例,数组看起来像这样:["Height", " 175"]
if 语句(也可以是 case 语句)然后确定我们是在处理姓名、身高还是体重变量。
然后将该值分配给其适当的变量。 trim()
方法在这个赋值过程中被调用以删除冒号后的 space。您也可以通过对“:”执行 split()
方法来规避此问题。
您也可以坚持使用当前的方法并进行一些 String
涉及拆分、Regex 或其他方法的操作,但我认为我提出的解决方案会更容易 read/work 在未来。