static void readRes() //读取文件中的规则 { String filePath = "Res/res.txt"; //文件res.txt放在文件夹Res中 String line; //存放读取的每一行 try{ BufferedReader in = new BufferedReader(new FileReader(filePath)); line = in.readLine(); while(line != null) { List<String> arrayRule = new ArrayList<String>(); //每读取一行,创建一个List集合对象 listRule.add(arrayRule); //将创建的List集合对象添加到List集合listRule中 String[] txt = line.split(" "); //用空格分割读取的每条规则,并把其放入txt数组中 for(int i = 0;i < txt.length;i++) //for循环将每条规则中的每一项添加到List集合arrayRule中 { arrayRule.add(txt[i]); } line = in.readLine(); //读取下一行,即下一条规则 } in.close(); //关闭缓冲流 } catch(IOException iox){ System.out.println("读取文件" + filePath + "时出错!"); //读取文件异常 } }
时间: 2024-02-15 17:28:46 浏览: 65
这段代码是用来从文件中读取规则的。具体实现步骤为:
1. 定义一个字符串变量filePath,用于存放规则文件的路径。
2. 定义一个变量line,用于存放读取的每一行规则。
3. 使用BufferedReader类读取文件内容,其中FileReader类用于读取文件,BufferedReader类用于提高读取效率。
4. 定义一个List集合对象arrayRule,用于存储每条规则中的每一项。
5. 将arrayRule添加到另一个List集合对象listRule中,即将每条规则添加到一个集合中。
6. 使用split方法将每条规则用空格分割成多个字符串,将其放入txt数组中。
7. 使用for循环将每个txt字符串添加到arrayRule集合中。
8. 读取下一行规则,直到读取完整个文件。
9. 关闭缓冲流。
总的来说,这段代码实现了从文件中读取规则的功能,并将每条规则存储到了一个List集合中,方便后续的规则匹配和推理。
相关问题
用Java语言编写程序使用对象输入/输出流完成用户注册登录界面,User类(用户名,密码)保存在工程文件夹下res\password.txt中 。(仿P204-例题10-12),使用消息框给出相关信息(自学JOptionPane的showMessageDialog方法的使用)
好的,我理解了你的问题。下面是Java代码实现:
```java
import java.io.*;
import javax.swing.*;
class User implements Serializable {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
public class LoginDemo {
public static void main(String[] args) {
String filePath = "res/password.txt";
File file = new File(filePath);
// 创建文件夹
File folder = new File("res");
if (!folder.exists()) {
folder.mkdirs();
}
try {
// 创建文件
if (!file.exists()) {
file.createNewFile();
}
// 读取用户信息
FileInputStream fileIn = new FileInputStream(file);
ObjectInputStream in = new ObjectInputStream(fileIn);
User user = (User) in.readObject();
in.close();
fileIn.close();
// 登录对话框
String inputUsername = JOptionPane.showInputDialog("请输入用户名:");
String inputPassword = JOptionPane.showInputDialog("请输入密码:");
// 校验用户名密码
if (inputUsername.equals(user.getUsername()) && inputPassword.equals(user.getPassword())) {
JOptionPane.showMessageDialog(null, "登录成功!");
} else {
JOptionPane.showMessageDialog(null, "用户名或密码错误!");
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
// 注册对话框
String username = JOptionPane.showInputDialog("请输入要注册的用户名:");
String password = JOptionPane.showInputDialog("请输入要注册的密码:");
User newUser = new User(username, password);
try {
// 写入用户信息
FileOutputStream fileOut = new FileOutputStream(file);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(newUser);
out.close();
fileOut.close();
JOptionPane.showMessageDialog(null, "注册成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
代码中的 `User` 类是一个简单的 JavaBean,包含用户名和密码两个属性。`LoginDemo` 类实现了用户登录和注册的功能。
程序会先读取工程文件夹下的 `res/password.txt` 文件,如果文件不存在则会创建新文件。读取到的 `User` 对象会用于登录校验。
登录校验和注册都使用了 `JOptionPane` 类的 `showInputDialog` 和 `showMessageDialog` 方法。前者用于输入用户名和密码,后者用于展示校验结果和注册成功提示。
注意,需要在类定义前添加 `import java.io.*;` 和 `import javax.swing.*;` 以引入必要的类。
AndroidStudio点击第一个界面里不同的3个textview,跳转至第二个界面且在textview分别滚动显示不同的txt文件,写代码
### 回答1:
首先,你需要在第一个界面中放置3个TextView,并设置它们的点击事件。在点击事件中,你需要使用Intent来启动第二个界面,并传递所选的txt文件的文件名。
接下来,在第二个界面中,你需要放置3个TextView,并设置它们的滚动属性。然后,你需要在OnCreate方法中获取从第一个界面传递过来的文件名,并根据文件名读取对应的txt文件内容,并将其设置到相应的TextView中。
下面是示例代码:
第一个界面代码:
```java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv1, tv2, tv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = findViewById(R.id.tv1);
tv2 = findViewById(R.id.tv2);
tv3 = findViewById(R.id.tv3);
tv1.setOnClickListener(this);
tv2.setOnClickListener(this);
tv3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, SecondActivity.class);
switch (v.getId()) {
case R.id.tv1:
intent.putExtra("fileName", "file1.txt");
break;
case R.id.tv2:
intent.putExtra("fileName", "file2.txt");
break;
case R.id.tv3:
intent.putExtra("fileName", "file3.txt");
break;
}
startActivity(intent);
}
}
```
第二个界面代码:
```java
public class SecondActivity extends AppCompatActivity {
private TextView tv1, tv2, tv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
tv1 = findViewById(R.id.tv1);
tv2 = findViewById(R.id.tv2);
tv3 = findViewById(R.id.tv3);
Intent intent = getIntent();
String fileName = intent.getStringExtra("fileName");
String fileContent = readFile(fileName);
tv1.setMovementMethod(new ScrollingMovementMethod());
tv2.setMovementMethod(new ScrollingMovementMethod());
tv3.setMovementMethod(new ScrollingMovementMethod());
switch (fileName) {
case "file1.txt":
tv1.setText(fileContent);
break;
case "file2.txt":
tv2.setText(fileContent);
break;
case "file3.txt":
tv3.setText(fileContent);
break;
}
}
private String readFile(String fileName) {
String fileContent = "";
try {
InputStream inputStream = getAssets().open(fileName);
int size = inputStream.available();
byte[] buffer = new byte[size];
inputStream.read(buffer);
inputStream.close();
fileContent = new String(buffer, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return fileContent;
}
}
```
在这个示例中,我们假设你已经在assets文件夹中放置了三个txt文件,分别命名为file1.txt、file2.txt和file3.txt。请注意,在使用getAssets().open()方法读取文件时,文件名必须与实际文件名一致,包括文件扩展名。
### 回答2:
在Android Studio中实现这个功能,首先需要创建两个Activity,并在布局文件中添加TextView组件用于显示文本内容。
1. 第一个界面的布局文件(activity_first.xml):
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="TextView 1"
android:textSize="24sp"
android:clickable="true" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView1"
android:layout_centerHorizontal="true"
android:text="TextView 2"
android:textSize="24sp"
android:clickable="true" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textView2"
android:layout_centerHorizontal="true"
android:text="TextView 3"
android:textSize="24sp"
android:clickable="true" />
</RelativeLayout>
```
2. 第二个界面的布局文件(activity_second.xml):
```xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textViewContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:textSize="18sp" />
</ScrollView>
```
3. 在MainActivity的onCreate方法中,为三个TextView设置点击监听器,并在监听器的onClick方法中实现跳转逻辑:
```java
public class MainActivity extends AppCompatActivity {
private TextView textView1;
private TextView textView2;
private TextView textView3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
textView1 = findViewById(R.id.textView1);
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("fileName", "file1.txt");
startActivity(intent);
}
});
textView2 = findViewById(R.id.textView2);
textView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("fileName", "file2.txt");
startActivity(intent);
}
});
textView3 = findViewById(R.id.textView3);
textView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("fileName", "file3.txt");
startActivity(intent);
}
});
}
}
```
4. 在SecondActivity的onCreate方法中,获取传递的文件名并读取文件内容,然后将内容设置到TextView中:
```java
public class SecondActivity extends AppCompatActivity {
private TextView textViewContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textViewContent = findViewById(R.id.textViewContent);
String fileName = getIntent().getStringExtra("fileName");
String fileContent = readFileContent(fileName);
textViewContent.setText(fileContent);
}
private String readFileContent(String fileName) {
StringBuilder content = new StringBuilder();
try {
InputStream is = getAssets().open(fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
content.append(line).append("\n");
}
br.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}
}
```
5. 将三个txt文件放置在\app\src\main\assets目录下(如file1.txt,file2.txt,file3.txt),每个文件存放相应的文本内容。
这样,当在第一个界面点击不同的TextView时,将跳转至第二个界面并根据所点击的TextView加载不同的txt文件内容,并在TextView中滚动显示。
### 回答3:
你好!以下是基于AndroidStudio的代码示例,实现点击第一个界面里不同的3个TextView,跳转至第二个界面且在TextView中分别滚动显示不同的txt文件。
在第一个界面(MainActivity.java)中,我们需要添加三个TextView,并给每个TextView添加点击事件。点击不同的TextView时,通过Intent将相应的txt文件路径传递给第二个界面。
```java
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_TEXT_FILE = 1;
private TextView textView1, textView2, textView3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化TextView
textView1 = findViewById(R.id.textView1);
textView2 = findViewById(R.id.textView2);
textView3 = findViewById(R.id.textView3);
// 为每个TextView添加点击事件
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openTextFile("file1.txt");
}
});
textView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openTextFile("file2.txt");
}
});
textView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openTextFile("file3.txt");
}
});
}
// 打开文本文件,并将文件路径传递给第二个界面
private void openTextFile(String fileName) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("file_path", fileName);
startActivityForResult(intent, REQUEST_TEXT_FILE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 处理第二个界面返回的结果
if (requestCode == REQUEST_TEXT_FILE && resultCode == RESULT_OK && data != null) {
String textContent = data.getStringExtra("text_content");
Toast.makeText(this, textContent, Toast.LENGTH_SHORT).show();
}
}
}
```
在第二个界面(SecondActivity.java)中,我们通过接收MainActivity传递的文件路径,并根据文件路径加载对应的txt文件内容,并将内容设置到TextView中。
```java
public class SecondActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textView = findViewById(R.id.secondTextView);
// 接收MainActivity传递的文件路径
String filePath = getIntent().getStringExtra("file_path");
// 加载txt文件内容
String fileContent = loadTextFile(filePath);
// 设置文本内容到TextView中
textView.setText(fileContent);
}
// 加载txt文件内容
private String loadTextFile(String filePath) {
StringBuilder fileContent = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(getAssets().open(filePath)));
String line;
while ((line = reader.readLine()) != null) {
fileContent.append(line);
fileContent.append("\n");
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return fileContent.toString();
}
@Override
public void onBackPressed() {
// 将文本内容返回给MainActivity
Intent intent = new Intent();
intent.putExtra("text_content", textView.getText().toString());
setResult(RESULT_OK, intent);
super.onBackPressed();
}
}
```
请根据需要,将对应的txt文件放置在"app/src/main/assets"目录下,并命名为"file1.txt"、"file2.txt"、"file3.txt"。
希望以上内容对你有所帮助!如有任何疑问,请随时追问。
阅读全文