java - 文件读取不显示任何文件实际数据

标签 java android

您好,我正在尝试从 Android 设备上的文件中逐行打印包含双数据的文本文件,但它似乎不起作用,出了什么问题?我没有收到任何错误,但无法正确打印?

在我的 bodyTempInfo View 中我得到读数:

Your Body Temperature Readings are:[]

我的temp2.​​txt文件,一共有1440个数字,这里就不全部粘贴了

37.06750839
36.89390613
36.88484785
36.81941363
36.81815453
36.97372599
37.0510889
36.90421803
36.90452867
36.81245808
36.91739551
37.05989195
36.80757783
36.85141347
37.04927826
36.80384926
36.94000689
37.04948705
37.07007973
36.95211596
37.05161886
36.97029703
37.03218835
36.89381629

我的bodyTempInfo.Java

package com.teamfara.circadianrhythmmonitor4;

import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class bodyTempInfo extends AppCompatActivity {


    ArrayList<Double> currentBodyTemp;

    public void displayCurrentBodyTempArray(View view) throws FileNotFoundException {

        ArrayList<Double> list = new ArrayList<>();

        File sdcard = Environment.getExternalStorageDirectory();

//Get the text file


//Read text from file

        File file = new File(sdcard, "temp2.txt");

        StringBuilder text = new StringBuilder();

        try {

            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while ((line = br.readLine()) != null) {
                text.append(line);
                list.add(Double.parseDouble(line));
                text.append('\n');
            }
            br.close();
        }
        catch(IOException e) {

        }


/*
        Scanner file2 = new Scanner(new File(sdcard, "temp.txt"));

        while (file2.hasNextLine()) {
            String line = file2.nextLine();

            Scanner scanner = new Scanner(line);
            scanner.useDelimiter(",");
            while (scanner.hasNextDouble()) {
                list.add(scanner.nextDouble());
            }
            scanner.close();
        }
        */
        currentBodyTemp = list;
        displayBodyTemp("Your Body Temperature Readings are:" + list);

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_body_temp_info);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        try {
            displayCurrentBodyTempArray(findViewById(R.id.bodyTempInfoArray));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    private void displayBodyTemp(String bodyTemp) {
        TextView textView = (TextView) findViewById(R.id.bodyTempInfoArray);
        textView.setText(bodyTemp);
    }


}

日志猫

10-25 14:15:11.041 11084-11084/? E/Zygote: MountEmulatedStorage()
10-25 14:15:11.041 11084-11084/? E/Zygote: v2
10-25 14:15:11.041 11084-11084/? I/libpersona: KNOX_SDCARD checking this for 10385
10-25 14:15:11.041 11084-11084/? I/libpersona: KNOX_SDCARD not a persona
10-25 14:15:11.051 11084-11084/? I/SELinux: Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_SM-G920V_5.1.1_0033
10-25 14:15:11.051 11084-11084/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
10-25 14:15:11.051 11084-11084/? I/art: Late-enabling -Xcheck:jni
10-25 14:15:11.111 11084-11084/? D/TimaKeyStoreProvider: TimaSignature is unavailable
10-25 14:15:11.111 11084-11084/? D/ActivityThread: Added TimaKeyStore provider
10-25 14:15:11.211 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: Inside getClassLibPath + mLibMap{0=, 1=}
10-25 14:15:11.231 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: Inside getClassLibPath caller 
10-25 14:15:11.241 11084-11084/com.teamfara.circadianrhythmmonitor4 D/InjectionManager: InjectionManager
10-25 14:15:11.241 11084-11084/com.teamfara.circadianrhythmmonitor4 D/InjectionManager: fillFeatureStoreMap com.teamfara.circadianrhythmmonitor4
10-25 14:15:11.241 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: Constructor com.teamfara.circadianrhythmmonitor4, Feature store :{}
10-25 14:15:11.241 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: featureStore :{}
10-25 14:15:11.301 11084-11084/com.teamfara.circadianrhythmmonitor4 D/SecWifiDisplayUtil: Metadata value : SecSettings2
10-25 14:15:11.491 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* installDecor mIsFloating : false
10-25 14:15:11.491 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* installDecor flags : -2139029248
10-25 14:15:11.761 11084-11084/com.teamfara.circadianrhythmmonitor4 D/Activity: performCreate Call Injection manager
10-25 14:15:11.771 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchOnViewCreated > Target : com.teamfara.circadianrhythmmonitor4.MainActivity isFragment :false
10-25 14:15:11.791 11084-11175/com.teamfara.circadianrhythmmonitor4 D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
10-25 14:15:11.821 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
10-25 14:15:11.821 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
10-25 14:15:11.891 11084-11084/com.teamfara.circadianrhythmmonitor4 D/SRIB_DCS: log_dcs ThreadedRenderer::initialize entered! 
10-25 14:15:11.951 11084-11175/com.teamfara.circadianrhythmmonitor4 D/libEGL: loaded /vendor/lib64/egl/libGLES_mali.so
10-25 14:15:11.991 11084-11175/com.teamfara.circadianrhythmmonitor4 I/OpenGLRenderer: Initialized EGL, version 1.4
10-25 14:15:12.001 11084-11175/com.teamfara.circadianrhythmmonitor4 I/OpenGLRenderer: HWUI protection enabled for context ,  &this =0x7f79c8abc0 ,&mEglDisplay = 1 , &mEglConfig = 1912140464 
10-25 14:15:12.011 11084-11175/com.teamfara.circadianrhythmmonitor4 D/OpenGLRenderer: Get maximum texture size. GL_MAX_TEXTURE_SIZE is 8192
10-25 14:15:12.011 11084-11175/com.teamfara.circadianrhythmmonitor4 D/OpenGLRenderer: Enabling debug mode 0
10-25 14:15:12.011 11084-11175/com.teamfara.circadianrhythmmonitor4 D/mali_winsys: new_window_surface returns 0x3000,  [1440x2560]-format:1
10-25 14:15:12.391 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchCreateOptionsMenu :com.teamfara.circadianrhythmmonitor4.MainActivity
10-25 14:15:12.391 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchPrepareOptionsMenu :com.teamfara.circadianrhythmmonitor4.MainActivity
10-25 14:15:12.461 11084-11084/com.teamfara.circadianrhythmmonitor4 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@2f8d81aa time:4028871
10-25 14:15:12.801 11084-11084/com.teamfara.circadianrhythmmonitor4 V/ActivityThread: updateVisibility : ActivityRecord{81a0e76 token=android.os.BinderProxy@2f8d81aa {com.teamfara.circadianrhythmmonitor4/com.teamfara.circadianrhythmmonitor4.MainActivity}} show : true
10-25 14:15:14.701 11084-11084/com.teamfara.circadianrhythmmonitor4 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@2f8d81aa time:4031112
10-25 14:15:14.921 11084-11084/com.teamfara.circadianrhythmmonitor4 D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
10-25 14:15:14.971 11084-11084/com.teamfara.circadianrhythmmonitor4 I/Timeline: Timeline: Activity_launch_request id:com.teamfara.circadianrhythmmonitor4 time:4031384
10-25 14:15:15.051 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* installDecor mIsFloating : false
10-25 14:15:15.051 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* installDecor flags : -2139029248
10-25 14:15:15.071 11084-11084/com.teamfara.circadianrhythmmonitor4 D/Activity: performCreate Call Injection manager
10-25 14:15:15.121 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchOnViewCreated > Target : com.teamfara.circadianrhythmmonitor4.bodyTempInfo isFragment :false
10-25 14:15:15.121 11084-11084/com.teamfara.circadianrhythmmonitor4 D/SecWifiDisplayUtil: Metadata value : SecSettings2
10-25 14:15:15.141 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* isFloatingMenuEnabled mFloatingMenuBtn : null
10-25 14:15:15.141 11084-11084/com.teamfara.circadianrhythmmonitor4 D/PhoneWindow: *FMB* isFloatingMenuEnabled return false
10-25 14:15:15.181 11084-11084/com.teamfara.circadianrhythmmonitor4 D/SRIB_DCS: log_dcs ThreadedRenderer::initialize entered! 
10-25 14:15:15.181 11084-11175/com.teamfara.circadianrhythmmonitor4 D/mali_winsys: new_window_surface returns 0x3000,  [1440x2560]-format:1
10-25 14:15:15.201 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchCreateOptionsMenu :com.teamfara.circadianrhythmmonitor4.bodyTempInfo
10-25 14:15:15.201 11084-11084/com.teamfara.circadianrhythmmonitor4 I/InjectionManager: dispatchPrepareOptionsMenu :com.teamfara.circadianrhythmmonitor4.bodyTempInfo
10-25 14:15:15.271 11084-11084/com.teamfara.circadianrhythmmonitor4 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@1f826b14 time:4031688
10-25 14:15:15.311 11084-11084/com.teamfara.circadianrhythmmonitor4 V/ActivityThread: updateVisibility : ActivityRecord{81a0e76 token=android.os.BinderProxy@2f8d81aa {com.teamfara.circadianrhythmmonitor4/com.teamfara.circadianrhythmmonitor4.MainActivity}} show : false

我的 content_body_temp_info.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_body_temp_info"
    tools:context="com.teamfara.circadianrhythmmonitor4.bodyTempInfo">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text = "Body Temperature Measurements will go here"
        android:id = "@+id/bodyTempInfoArray"/>
</RelativeLayout>

我的MainActivity.java

package com.teamfara.circadianrhythmmonitor4;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;


public class MainActivity extends AppCompatActivity {


    private final static int REQUEST_ENABLE_BT = 1;
    UUID myUUID = UUID.randomUUID();
    private static final int DISCOVER_DURATION = 300;
    private static final int REQUEST_BLU = 1;
    ArrayAdapter<String> mArrayAdapter;
    ArrayList<Double> currentBodyTemp;
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!mBluetoothAdapter.isEnabled()) {
            Intent enableBIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBIntent, REQUEST_ENABLE_BT);
        }

        //If there are paired devices
        /*Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            //Loop through the paired devices
            for (BluetoothDevice device : pairedDevices) {
                //add the name and address to an array adapter to show in a ListView
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
        }
        */

        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

        Intent discoverableIntent = new
                Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
        startActivity(discoverableIntent);




    }

    ArrayList<Double> lightInfo;

    public void sendLightFile() {

        String filename = "lightInfo";
        String string = "Here is light info" + lightInfo;
        FileOutputStream outputStream;

        try {
            outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
            outputStream.write(string.getBytes());
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Send information over bluetooth?

    }



    public void goToBodyInfo(View view) {
        Intent intent = new Intent(this, bodyTempInfo.class);
        startActivity(intent);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void sendLight(View view) {

        Intent intent = new Intent(this, ConnectTest.class);
        startActivity(intent);

    }


    // Create a BroadcastReceiver for ACTION_FOUND
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // Add the name and address to an array adapter to show in a ListView
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
            }
        }
    };


    private class AcceptThread extends Thread {
        private final BluetoothServerSocket mmServerSocket;
        BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();


        public AcceptThread() {
            // Use a temporary object that is later assigned to mmServerSocket,
            // because mmServerSocket is final
            BluetoothServerSocket tmp = null;
            try {
                // MY_UUID is the app's UUID string, also used by the client code
                tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("CircadianRhythmMonitor", myUUID);
            } catch (IOException e) {
            }
            mmServerSocket = tmp;
        }

        public void run() {
            BluetoothSocket socket = null;
            // Keep listening until exception occurs or a socket is returned
            while (true) {
                try {
                    socket = mmServerSocket.accept();
                } catch (IOException e) {
                    break;
                }
                // If a connection was accepted
                if (socket != null) {
                    // Do work to manage the connection (in a separate thread)
                    //manageConnectedSocket(socket);
                    //mmServerSocket.close();
                    break;
                }
            }
        }

        /**
         * Will cancel the listening socket, and cause the thread to finish
         */
        public void cancel() {
            try {
                mmServerSocket.close();
            } catch (IOException e) {
            }
        }
    }

    private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        private final InputStream mmInStream;
        private final OutputStream mmOutStream;

        public ConnectedThread(BluetoothSocket socket) {
            mmSocket = socket;
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            // Get the input and output streams, using temp objects because
            // member streams are final
            try {
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) { }

            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }

        public void run() {
            byte[] buffer = new byte[1024];  // buffer store for the stream
            int bytes; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);
                    // Send the obtained bytes to the UI activity
                   // mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                            //.sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }

        /* Call this from the main activity to send data to the remote device */
        public void write(byte[] bytes) {
            try {
                mmOutStream.write(bytes);
            } catch (IOException e) { }
        }

        /* Call this from the main activity to shutdown the connection */
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) { }
        }
    }


    private void displayBodyTemp(String bodyTemp) {
        TextView textView = (TextView) findViewById(R.id.bodyTempInfoArray);
        textView.setText(bodyTemp);
    }



}

我的 AndroidManfiest.xml

package="com.teamfara.circadianrhythmmonitor4" >

    <!-- Allows bluetooth to be used from this app -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.NFC" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".bodyTempInfo"
            android:label="@string/title_activity_body_temp_info"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.teamfara.circadianrhythmmonitor4.MainActivity" />
        </activity>
        <activity
            android:name=".ConnectTest"
            android:label="@string/title_activity_body_temp_info"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.teamfara.circadianrhythmmonitor4.MainActivity" />
        </activity>
    </application>
    <uses-feature
        android:name="android.hardware.nfc"
        android:required="true" />

</manifest>

最佳答案

displayBodyTemp() 函数中,您传递一个字符串并使用 + 添加数组列表。这就是故事。您只需要传递一个字符串。或者重写 Arraylist

toString() 方法

或者,试试这个:

displayBodyTemp("Your Body Temperature Readings are:" + text);

关于java - 文件读取不显示任何文件实际数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333186/

相关文章:

java - MQTT/Camel/自定义 header 参数

java - 正则表达式从链接中提取值

java - 调试Spring配置不起作用

java - 如何在不使用 XML 文件的情况下为一个类创建多个依赖 bean?

android - 如何修复 android 中的重复条目 ZipException?

android - EditText 改变样式

java - 如何获取从图库中选择的图像的目录和文件名

android - 一次添加多个产品

java - Eclipse (Java SE) 安装错误,没有消息

java - DSpace 5.4 XMLUI – 更改文件名