【发布时间】:2014-04-24 12:45:20
【问题描述】:
我有一个侦听器类,它向队列添加值,我有另一个包含队列并将其写入文件的类。这两个类都在后台线程中运行。
监听类
private AccelerometerQueue mLogQueue; //Queue class implements Runnable
private Thread mQueueThread; //Thread to run Runnable of Queue class
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
synchronized (this) {
mLogQueue.addToQueue(
new AccelerometerVector(
System.currentTimeMillis(),
sensorEvent.timestamp,
sensorEvent.values[0],
sensorEvent.values[1],
sensorEvent.values[2]
)
);
mQueueThread = new Thread(mLogQueue);
mQueueThread.start();
}
}
队列类实现 Runnable 并具有此 LinkedList
public void addToQueue(AccelerometerVector vector) {
mQueue.add(vector);
}
public synchronized int getQueueSize(){
return mQueue.size();
}
@Override
public void run() {
try {
mLogFile = createLogFile();
mLogOutStream = new FileOutputStream(mLogFile, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (!mQueue.isEmpty()) {
try {
mLogOutStream.write(mQueue.poll().getDataStringLine().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
if (mLogFile.length() > AppConstants.LOG_FILE_MAX_SIZE) {
try {
reportCurrentLogFileIsFinished(mLogFile);
mLogOutStream.flush();
mLogOutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
mLogOutStream = new FileOutputStream(createLogFile(), true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
private File createLogFile() {
String datePart = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date());
String namePart = "log_" + datePart + ".csv";
File folder = new File(Environment.getExternalStorageDirectory().toString()
+ File.separator + AppConstants.APP_LOG_FOLDER_NAME);
folder.mkdirs();
File file = new File(folder + File.separator + namePart);
if (!file.exists()) { //create the file if not exist
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Can not create file: " + file.getName());
}
}
if (file.exists()) {
return file;
} else {
return null;
}
}
我的目标是将队列内容保存到存储中,文件大小不应超过 256kb,当文件达到 256kb 时,应创建一个新文件。
代码当前所做的是写入一些大小为 2 或 3 Kb 的文件,然后在 createLogFile() 方法中引发异常,抱怨无法创建文件(我在 Logcat 中看到了这一点)。
问题是,我做错了什么以及可能的解决方案是什么?
【问题讨论】:
标签: java android linked-list queue fileoutputstream