这是我创建的一个函数。
如您所见,这将读取搜索filename的文件,然后读取--TEMPERATURE UP--。
问题是不是每个filename都有一个--TEMPERATURE UP--
我尝试使用一个else语句,但是如果我从else语句中删除break,对于没有--TEMPERATURE UP--的filename,整个应用程序都会崩溃。
但是,如果我在the语句中添加一个break语句,那么每个filename都会运行the语句,即使它们包含--TEMPERATURE UP--
我也尝试过在没有!line.equals("--TEMPERATURE UP--")的情况下做一个简单的still语句,但是它仍然是一样的。
要么我必须添加break才能运行不运行if代码的else代码,要么删除运行if代码但无法运行else代码的break,因为它会崩溃。
请建议我应该如何更改代码,以便当它读取--TEMPERATURE UP--时,它将运行if代码,否则它将运行else代码。
非常感谢。
public void tempUp() {
SharedPreferences sharedTest = getSharedPreferences("MySharedTest", Context.MODE_PRIVATE);
String filename = sharedTest.getString("filename", " ");
Log.d("File readed: ", filename);
File dir = new File(path);
File[] files = dir.listFiles();
for (File f : files) {
if (f.isFile()) {
BufferedReader inputStream = null;
try {
inputStream = new BufferedReader(new FileReader(f));
String lineToRead = filename;
String CurrentLine;
while ((CurrentLine = inputStream.readLine()) != null) {
if (CurrentLine.equals(lineToRead)) {
try
{
BufferedReader reader = new BufferedReader(new FileReader(f));
String line = reader.readLine();
while(line !=null)
{
line = reader.readLine();
if(line.equals("--TEMPERATURE UP--"))
{
final String ms = reader.readLine();
Log.d("temp up: ", ms);
new Thread(new Runnable()
{
@Override
public void run()
{
String message = "\u000704NTX" + ms + "\r";
byte[] byte_array = message.getBytes();
try
{
SharedPreferences prefx = getSharedPreferences("Device_Data", Context.MODE_PRIVATE);
String device_ip = prefx.getString("local_ip", " ");
String host = device_ip;
Socket socket = new Socket(host, 8070);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write(byte_array);
out.flush();
}
catch (Exception e)
{
}
}
}).start();
break;
}
else if (!line.equals("--TEMPERATURE UP--"))
{
Toast.makeText(TestScreen.this, "There is no Temperature Display for this profile.", Toast.LENGTH_LONG).show();
break;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}更新:
try
{
BufferedReader reader = new BufferedReader(new FileReader(f));
String line = reader.readLine();
boolean hasTempDisplayProfile = false;
while((line = reader.readLine()) !=null)
{
if(line.equals("--TEMPERATURE UP--")) {
hasTempDisplayProfile = true;
final String ms = reader.readLine();
Log.d("temp up: ", ms);
new Thread(new Runnable() {
@Override
public void run() {
String message = "\u000704NTX" + ms + "\r";
byte[] byte_array = message.getBytes();
try {
SharedPreferences prefx = getSharedPreferences("Device_Data", Context.MODE_PRIVATE);
String device_ip = prefx.getString("local_ip", " ");
String host = device_ip;
Socket socket = new Socket(host, 8070);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.write(byte_array);
out.flush();
} catch (Exception e) {
}
}
}).start();
break;
}
}
if (hasTempDisplayProfile){
Toast.makeText(TestScreen.this, "There is no Temperature Display for this profile.", Toast.LENGTH_LONG).show();
break;
}
}
catch (IOException e)
{
e.printStackTrace();
}发布于 2018-05-10 02:52:17
您目前的实现是:
while(readLine) {
if (line.equal("--TEMPERATURE UP--") {
// process
} else {
// Toast message
}
}你现在看到问题了吗?问题是您正在再次测试每一行的--TEMPERATURE UP--,并在每行不匹配时显示Toast。
这是错误的。
您想要的是检查整个文件是否包含--TEMPERATURE UP--,如果是,则显示吐司。
因此,正确的实现将涉及一个标志:
boolean hasTempDisplayProfile = false;
while(readLine) {
if (line.equal("--TEMPERATURE UP--") {
// process
hasTempDisplayProfile = true;
}
}
if (!hasTempDisplayProfile) {
// Toast message
}编辑您的代码还有另一个严重缺陷:
String line = reader.readLine();
while(line !=null){
line = reader.readLine();
... your process ...
}在这段代码中,你读了一行。然后在while中检查行not = null。问题是,您没有使用该行,而是使用进程读取另一个line = reader.readLine()。当您到达文件结束时,它将抛出NullPointerException。
改为:
String line;
while((line = reader.readLine()) !=null){
// Do not read new line here. Just process with "line"
}顺便说一句,您的代码需要改进。它现在有太多的缩进,这是非常令人沮丧的阅读。你可以试试:
true,尝试返回时,false。例如,您的:
用于(文件f:文件){ if (f.isFile()) { //您的进程}}应改为:
for (File f: files) {
if (!f.isFile()) {
continue;
}
// Your process
}它减少了一层压痕。
https://stackoverflow.com/questions/50264613
复制相似问题