当前位置: 编程技术>移动开发
本页文章导读:
▪在Corona SDK中准确的理解Lua的table 在Corona SDK中正确的理解Lua的table
原文地址:http://www.buildapp.net/post/corona_lua_table.htm在corona sdk里,是用lua去做所有事情的。因此,了解lua的特性和API非常重要。什么是Table?如果你有其他语.........
▪ Ubuntu10.10停真机调试 Ubuntu10.10下真机调试
android SDK原文档如下:Setting up a Device for DevelopmentWith an Android-powered device, you can develop and debug your Android applications just as you would on the emulator. Before you can start, there are just.........
▪ 罗列文件夹中所有文件 列举文件夹中所有文件
package com.edison.ex;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
public class ListAllFiles {
public Context mCon;
public List<File> fileNameList;
.........
[1]在Corona SDK中准确的理解Lua的table
来源: 互联网 发布时间: 2014-02-18
在Corona SDK中正确的理解Lua的table
原文地址:http://www.buildapp.net/post/corona_lua_table.htm
在corona sdk里,是用lua去做所有事情的。因此,了解lua的特性和API非常重要。
什么是Table?
如果你有其他语言的开发经验,你应该知道2种数据类型,那就是数组和集合,在lua中,table就是数组和集合的混合物(这也是为什么table如此强大的原因)。
如果corona sdk是你第一次开始接触编程,你可能认为table就是一个表,或者梳妆台,哈哈。
梳妆台的抽屉就类似于“key”,你放在里面的东西就是“value”。然后,lua table和真正的梳妆台不同的是,梳妆台抽屉里面还可以放置梳妆台。
在我们继续之前,我认为你已经了解了如下内容:
1)table里保存数据,数据可以是任何类型,包括function。
2)table里也可以保存table
3)key代表数据存储的位置(如抽屉)
4)value就是用特定的key存储的数据
这可能就是lua table的基本解释了,下面我讲说一说在lua中如何定义table,如何对table进行存储和检索,以及如何使用“for”来循环表里table。
定义table
当然,定义,我的意思是创建一个表,所以你可以任何时候用它。现在,我将重点放在创建一个没有数据的空白表。这将是我们的品牌新的梳妆台:
local myTable = {}
在lua中定义table和定义其他变量一样,就是一个等号,左边是变量名,右边是存储的数据。table是用“{”“}”来定义存储的数据。这种表达方式在你使用一些函数的时候经常看到。现在你有一个空白表(mytable),接下来,我将通过不同的方式存储数据到一个表中,以及如何检索数据。
table数组
下面3种方法来定义table都是合法的,实际上他们都在做同样的事情。3和4的其实是一样的,只是告诉你在这里换行是没有必要的,尤其把table作为函数参数时经常用到。
方法1:
local colorTable = {}
colorTable[1] = "blue"
colorTable[2] = "red"
colorTable[3] = "yellow"
colorTable[4] = "green"
colorTable[5] = "purple"
print( colorTable[3] ) -- output: "yellow"
方法2:
local colorTable = {
[1] = "blue",
[2] = "red",
[3] = "yellow",
[4] = "green",
[5] = "purple"
}
print( colorTable[3] ) -- output: "yellow"
方法3:
local colorTable = {
"blue",
"red",
"yellow",
"green",
"purple"
}
print( colorTable[3] ) -- output: "yellow"
方法4:
local colorTable = { "blue", "red", "yellow", "green", "purple" }
print( colorTable[3] ) -- output: "yellow"
上面的例子都在做同样一件事情。作为corona的开发者,你必须熟悉每一种表示方法,因为你可以完全根据个人喜好来使用table。当table仅仅是做为一个数值数组时,key都是数值(和其他语言不同的是,是从1开始而不是0)。例如在每个print语句(段)告诉您如何使用放在方括号(“[]”)之间的索引号来访问表中的数据。
要获得使用数字key的table的元素总数,你可以这样做在表的名称前面使用'#'标志,就像这样:
print( #colorTable ) -- output: 5
table集合
Lua中的table,也可以像其他编程语言的dictionary集合(也称为“关联数组”)。
下面是一个像dictionary一样行为的表的例子:
local colorTable = {
sky = "blue",
grass = "green",
water = "blue",
lava = "red"
}
colorTable.dirt = "brown"
-- Accessing the data:
print( colorTable.grass ) -- output: green
print( colorTable["dirt"] ) -- output: brown
在上面的例子,你可以看到没有定义数字键,这就是主要区别。有时候,使用这种方法可以使得数据便于识别和访问。使用key而不是数字索引,是为了更准确(当作为集合使用时,数据的实际存储位置和你定义时的位置可能不一致)。你可以使用下面两种方法来访问数据:
colorTable["sky"]
-- and...
colorTable.sky
上面的2种方法显示了2种不同的方法来访问同一个数据。和使用数字key一样,你也可以添加key,就像定义之后再添加“dirt”一样。
lua中的table可以同时表示数组和集合,你可以混合使用数字key和字符串key,但是这会非常混乱,我们建议你同时只用来表达一个类型的数据。
数据类型
如上所述,table可以用key来存储任何数据类型。这意味着你可以存储额外的表,函数和引用函数的表,以及更常见的数字和字符串。
这里有一个如何在表中存储一个表的例子(以及如何访问数据):
local people = {
{ name="Bob", age=32, gender="male" },
{ name="Jane", age=29, gender="female" }
}
print( people[1].name )
-- output: Bob
print( people[2]["gender"] )
-- output: female
table中可以存储任意个table,没有限制。
下面,另一个稍微复杂的数据table,你会看到在一个表中利用一个key来存储function的引用。示例:
local function helloWorld()
print( "Hello World!" )
end
local myTable = {
name = "Bob",
func = helloWorld
}
myTable.func() -- output: Hello World!
----------
local function helloWorld()
print( "Hello World!" )
end
local myTable = { 100, 100, helloWorld, true }
myTable[3]() -- output: Hello World!
下面将展示如何在一个table里存储function的实际功能。
local myTable = { 100, 100, function() print( "Hello World!" ); end, true }
myTable[3]() -- output: Hello World!
你现在可能已经明白了,lua table里面的key和lua的其他变量没有任何区别,可以存储任何类型数据。这样是最好理解的方法了。
当table越来越大越来越混乱时,我建议里可以用逗号为间隔来看待。可能会比较清晰。
table和循环
如何迭代表数据是使用table最常见的功能了,下面展示如何遍历一个使用数字key的table:
local myTable = { "blue", "red", "yellow", "green", "white", "purple" }
for i=1,#myTable do
print( myTable[i] )
end
-- OUTPUT:
blue
red
yellow
green
white
purple
上面的代码,我想已经很清楚的说明了一切。遍历数字key的表的内容是相当平滑的。
但是,如果你的表的键名,而不是数字?
为此,我们将使用pairs()函数(它返回两个变量):
local colorTable = {
sky = "blue",
grass = "green",
water = "blue",
lava = "red",
dirt = "brown"
}
for key,value in pairs(colorTable) do
print( key, value )
end
-- OUTPUT:
sky blueg
rass green
water blue
lava red
dirt brown
如果一个table使用字符串来表示key,那么你就不能简单的使用索引来访问(上面说过当用字符串key来存储时,数据的实际存储顺序和你定义它时的可能不一致,所以不能直接用数字索引)。相反,你使用了pairs()来遍历没有使用数字key的table(就像上面的例子中看到)。
为了获得更完整,全面了解Lua中的表,请访问以下两个网页(两者都是我学习的时候我非常有用):
http://www.lua.org/pil/2.5.html
http://lua.gts-stolberg.de/en/Tables.php
原文地址:http://www.buildapp.net/post/corona_lua_table.htm
在corona sdk里,是用lua去做所有事情的。因此,了解lua的特性和API非常重要。
什么是Table?
如果你有其他语言的开发经验,你应该知道2种数据类型,那就是数组和集合,在lua中,table就是数组和集合的混合物(这也是为什么table如此强大的原因)。
如果corona sdk是你第一次开始接触编程,你可能认为table就是一个表,或者梳妆台,哈哈。
梳妆台的抽屉就类似于“key”,你放在里面的东西就是“value”。然后,lua table和真正的梳妆台不同的是,梳妆台抽屉里面还可以放置梳妆台。
在我们继续之前,我认为你已经了解了如下内容:
1)table里保存数据,数据可以是任何类型,包括function。
2)table里也可以保存table
3)key代表数据存储的位置(如抽屉)
4)value就是用特定的key存储的数据
这可能就是lua table的基本解释了,下面我讲说一说在lua中如何定义table,如何对table进行存储和检索,以及如何使用“for”来循环表里table。
定义table
当然,定义,我的意思是创建一个表,所以你可以任何时候用它。现在,我将重点放在创建一个没有数据的空白表。这将是我们的品牌新的梳妆台:
local myTable = {}
在lua中定义table和定义其他变量一样,就是一个等号,左边是变量名,右边是存储的数据。table是用“{”“}”来定义存储的数据。这种表达方式在你使用一些函数的时候经常看到。现在你有一个空白表(mytable),接下来,我将通过不同的方式存储数据到一个表中,以及如何检索数据。
table数组
下面3种方法来定义table都是合法的,实际上他们都在做同样的事情。3和4的其实是一样的,只是告诉你在这里换行是没有必要的,尤其把table作为函数参数时经常用到。
方法1:
local colorTable = {}
colorTable[1] = "blue"
colorTable[2] = "red"
colorTable[3] = "yellow"
colorTable[4] = "green"
colorTable[5] = "purple"
print( colorTable[3] ) -- output: "yellow"
方法2:
local colorTable = {
[1] = "blue",
[2] = "red",
[3] = "yellow",
[4] = "green",
[5] = "purple"
}
print( colorTable[3] ) -- output: "yellow"
方法3:
local colorTable = {
"blue",
"red",
"yellow",
"green",
"purple"
}
print( colorTable[3] ) -- output: "yellow"
方法4:
local colorTable = { "blue", "red", "yellow", "green", "purple" }
print( colorTable[3] ) -- output: "yellow"
上面的例子都在做同样一件事情。作为corona的开发者,你必须熟悉每一种表示方法,因为你可以完全根据个人喜好来使用table。当table仅仅是做为一个数值数组时,key都是数值(和其他语言不同的是,是从1开始而不是0)。例如在每个print语句(段)告诉您如何使用放在方括号(“[]”)之间的索引号来访问表中的数据。
要获得使用数字key的table的元素总数,你可以这样做在表的名称前面使用'#'标志,就像这样:
print( #colorTable ) -- output: 5
table集合
Lua中的table,也可以像其他编程语言的dictionary集合(也称为“关联数组”)。
下面是一个像dictionary一样行为的表的例子:
local colorTable = {
sky = "blue",
grass = "green",
water = "blue",
lava = "red"
}
colorTable.dirt = "brown"
-- Accessing the data:
print( colorTable.grass ) -- output: green
print( colorTable["dirt"] ) -- output: brown
在上面的例子,你可以看到没有定义数字键,这就是主要区别。有时候,使用这种方法可以使得数据便于识别和访问。使用key而不是数字索引,是为了更准确(当作为集合使用时,数据的实际存储位置和你定义时的位置可能不一致)。你可以使用下面两种方法来访问数据:
colorTable["sky"]
-- and...
colorTable.sky
上面的2种方法显示了2种不同的方法来访问同一个数据。和使用数字key一样,你也可以添加key,就像定义之后再添加“dirt”一样。
lua中的table可以同时表示数组和集合,你可以混合使用数字key和字符串key,但是这会非常混乱,我们建议你同时只用来表达一个类型的数据。
数据类型
如上所述,table可以用key来存储任何数据类型。这意味着你可以存储额外的表,函数和引用函数的表,以及更常见的数字和字符串。
这里有一个如何在表中存储一个表的例子(以及如何访问数据):
local people = {
{ name="Bob", age=32, gender="male" },
{ name="Jane", age=29, gender="female" }
}
print( people[1].name )
-- output: Bob
print( people[2]["gender"] )
-- output: female
table中可以存储任意个table,没有限制。
下面,另一个稍微复杂的数据table,你会看到在一个表中利用一个key来存储function的引用。示例:
local function helloWorld()
print( "Hello World!" )
end
local myTable = {
name = "Bob",
func = helloWorld
}
myTable.func() -- output: Hello World!
----------
local function helloWorld()
print( "Hello World!" )
end
local myTable = { 100, 100, helloWorld, true }
myTable[3]() -- output: Hello World!
下面将展示如何在一个table里存储function的实际功能。
local myTable = { 100, 100, function() print( "Hello World!" ); end, true }
myTable[3]() -- output: Hello World!
你现在可能已经明白了,lua table里面的key和lua的其他变量没有任何区别,可以存储任何类型数据。这样是最好理解的方法了。
当table越来越大越来越混乱时,我建议里可以用逗号为间隔来看待。可能会比较清晰。
table和循环
如何迭代表数据是使用table最常见的功能了,下面展示如何遍历一个使用数字key的table:
local myTable = { "blue", "red", "yellow", "green", "white", "purple" }
for i=1,#myTable do
print( myTable[i] )
end
-- OUTPUT:
blue
red
yellow
green
white
purple
上面的代码,我想已经很清楚的说明了一切。遍历数字key的表的内容是相当平滑的。
但是,如果你的表的键名,而不是数字?
为此,我们将使用pairs()函数(它返回两个变量):
local colorTable = {
sky = "blue",
grass = "green",
water = "blue",
lava = "red",
dirt = "brown"
}
for key,value in pairs(colorTable) do
print( key, value )
end
-- OUTPUT:
sky blueg
rass green
water blue
lava red
dirt brown
如果一个table使用字符串来表示key,那么你就不能简单的使用索引来访问(上面说过当用字符串key来存储时,数据的实际存储顺序和你定义它时的可能不一致,所以不能直接用数字索引)。相反,你使用了pairs()来遍历没有使用数字key的table(就像上面的例子中看到)。
为了获得更完整,全面了解Lua中的表,请访问以下两个网页(两者都是我学习的时候我非常有用):
http://www.lua.org/pil/2.5.html
http://lua.gts-stolberg.de/en/Tables.php
[2] Ubuntu10.10停真机调试
来源: 互联网 发布时间: 2014-02-18
Ubuntu10.10下真机调试
android SDK原文档如下:
Setting up a Device for Development
With an Android-powered device, you can develop and debug your Android applications just as you would on the emulator. Before you can start, there are just a few things to do:
Declare your application as "debuggable" in your Android Manifest.
In Eclipse, you can do this from the Application tab when viewing the Manifest (on the right side, set Debuggable to true). Otherwise, in the AndroidManifest.xml file, add android:debuggable="true" to the <application> element.
(1) Turn on "USB Debugging" on your device.
On the device, go to the home screen, press MENU, select Applications > Development, then enable USB debugging.
(2) Setup your system to detect your device.
If you're developing on Windows, you need to install a USB driver for adb. See the Windows USB Driver documentation.
If you're developing on Mac OS X, it just works. Skip this step.
If you're developing on Ubuntu Linux, you need to add a rules file that contains a USB configuration for each type of device you want to use for development. Each device manufacturer uses a different vendor ID. The example rules files below show how to add an entry for a single vendor ID (the HTC vendor ID). In order to support more devices, you will need additional lines of the same format that provide a different value for the SYSFS{idVendor} property. For other IDs, see the table of USB Vendor IDs, below.
(3)Log in as root and create this file: /etc/udev/rules.d/51-android.rules.
For Gusty/Hardy, edit the file to read:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
For Dapper, edit the file to read:
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
(4)Now execute:
chmod a+r /etc/udev/rules.d/51-android.rules
You can verify that your device is connected by executing adb devices from your SDK tools/ directory. If connected, you'll see the device name listed as a "device."
If using Eclipse, run or debug as usual. You will be presented with a Device Chooser dialog that lists the available emulator(s) and connected device(s). Select the device upon which you want to install and run the application.
If using the Android Debug Bridge (adb), you can issue commands with the -d flag to target your connected device.
那我们的实际需要在执行的操作是:
打开终端 ,首先,以 root 权限在 /etc/udev/rules.d/ 的目录下创建 .rules 配置文件。
命令:sudo touch 51-Android.rules
接下来,我么需要编辑刚刚创建的.rules文件
命令:gedit 51-Android.rules
在其中输入:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
然后,赋予权限
命令:chmod a+r 51-Android.rules
重启udev
命令:sudo /etc/init.d/udev restart
到了这里基本就配置好了,我们可以拔掉手机usb 线后重新连接,在/android/sdk/tools/目录下执行 命令:adb devices
若列出设备即可开始调试
List of devices attached
HT069PL00679 device
也有可能还会遇到的问题就是
List of devices attached
?????? no permission
当然这也只是权限的问题,通过logcat查看系统日志,会发现给出了如下的提示:
will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/50-Android
问题明了,重新编辑.rules文件,将SYSFS 替换为 ATTR 即可
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"
重复接下来操作。
1. 在终端运行 lsusb
会发现结果有会有如下类似记录:
Bus 001 Device 008: ID 0bb4:0c02 High Tech Computer Corp.
这时键入
sudo vim /etc/udev/rules.d/50-Android.rules
在打开的文件中增加以下文本:
SUBSYSTEM=="usb", SYSFS{"High Tech Computer Corp."}=="0bb4", MODE="0666"
2. 运行以下命令:
sudo chmod a+rx /etc/udev/rules.d/50-Android.rules
sudo /etc/init.d/udev restart
3. 在 Android sdk 的 tools 目录下运行 (这一步很重要,必须要sudo,否则没效果)
sudo ./adb kill-server
sudo ./adb devices
然后,就可以直接用 adb 来进行操作了。
1、sudo gedit ~/.bashrc
2、将下面的两句加到上面打开的文件里
export ANDROID_HOME=/home/jason/Develop_SDK/android-sdk-linux_86
export PATH=$PATH:$ANDROID_HOME/tools
最新的SDK要改为:$PATH:$ANDROID_HOMOE/platform-tools
注意:“/home/jason/Develop_SDK/android-sdk-linux_86”是sdk的路径.
3、重启电脑,OK啦!
android SDK原文档如下:
Setting up a Device for Development
With an Android-powered device, you can develop and debug your Android applications just as you would on the emulator. Before you can start, there are just a few things to do:
Declare your application as "debuggable" in your Android Manifest.
In Eclipse, you can do this from the Application tab when viewing the Manifest (on the right side, set Debuggable to true). Otherwise, in the AndroidManifest.xml file, add android:debuggable="true" to the <application> element.
(1) Turn on "USB Debugging" on your device.
On the device, go to the home screen, press MENU, select Applications > Development, then enable USB debugging.
(2) Setup your system to detect your device.
If you're developing on Windows, you need to install a USB driver for adb. See the Windows USB Driver documentation.
If you're developing on Mac OS X, it just works. Skip this step.
If you're developing on Ubuntu Linux, you need to add a rules file that contains a USB configuration for each type of device you want to use for development. Each device manufacturer uses a different vendor ID. The example rules files below show how to add an entry for a single vendor ID (the HTC vendor ID). In order to support more devices, you will need additional lines of the same format that provide a different value for the SYSFS{idVendor} property. For other IDs, see the table of USB Vendor IDs, below.
(3)Log in as root and create this file: /etc/udev/rules.d/51-android.rules.
For Gusty/Hardy, edit the file to read:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
For Dapper, edit the file to read:
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"
(4)Now execute:
chmod a+r /etc/udev/rules.d/51-android.rules
You can verify that your device is connected by executing adb devices from your SDK tools/ directory. If connected, you'll see the device name listed as a "device."
If using Eclipse, run or debug as usual. You will be presented with a Device Chooser dialog that lists the available emulator(s) and connected device(s). Select the device upon which you want to install and run the application.
If using the Android Debug Bridge (adb), you can issue commands with the -d flag to target your connected device.
那我们的实际需要在执行的操作是:
打开终端 ,首先,以 root 权限在 /etc/udev/rules.d/ 的目录下创建 .rules 配置文件。
命令:sudo touch 51-Android.rules
接下来,我么需要编辑刚刚创建的.rules文件
命令:gedit 51-Android.rules
在其中输入:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
然后,赋予权限
命令:chmod a+r 51-Android.rules
重启udev
命令:sudo /etc/init.d/udev restart
到了这里基本就配置好了,我们可以拔掉手机usb 线后重新连接,在/android/sdk/tools/目录下执行 命令:adb devices
若列出设备即可开始调试
List of devices attached
HT069PL00679 device
也有可能还会遇到的问题就是
List of devices attached
?????? no permission
当然这也只是权限的问题,通过logcat查看系统日志,会发现给出了如下的提示:
will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/50-Android
问题明了,重新编辑.rules文件,将SYSFS 替换为 ATTR 即可
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666"
重复接下来操作。
1. 在终端运行 lsusb
会发现结果有会有如下类似记录:
Bus 001 Device 008: ID 0bb4:0c02 High Tech Computer Corp.
这时键入
sudo vim /etc/udev/rules.d/50-Android.rules
在打开的文件中增加以下文本:
SUBSYSTEM=="usb", SYSFS{"High Tech Computer Corp."}=="0bb4", MODE="0666"
2. 运行以下命令:
sudo chmod a+rx /etc/udev/rules.d/50-Android.rules
sudo /etc/init.d/udev restart
3. 在 Android sdk 的 tools 目录下运行 (这一步很重要,必须要sudo,否则没效果)
sudo ./adb kill-server
sudo ./adb devices
然后,就可以直接用 adb 来进行操作了。
1、sudo gedit ~/.bashrc
2、将下面的两句加到上面打开的文件里
export ANDROID_HOME=/home/jason/Develop_SDK/android-sdk-linux_86
export PATH=$PATH:$ANDROID_HOME/tools
最新的SDK要改为:$PATH:$ANDROID_HOMOE/platform-tools
注意:“/home/jason/Develop_SDK/android-sdk-linux_86”是sdk的路径.
3、重启电脑,OK啦!
[3] 罗列文件夹中所有文件
来源: 互联网 发布时间: 2014-02-18
列举文件夹中所有文件
package com.edison.ex; import java.io.File; import java.util.ArrayList; import java.util.List; import android.content.Context; public class ListAllFiles { public Context mCon; public List<File> fileNameList; /***/ public ArrayList<String> fnList; public ListAllFiles(Context mCon) { this.mCon = mCon; } public void initFileList(String mPath) { File path = new File(mPath); File[] f = path.listFiles(); fill(f); } /** Returns an array of files contained in the directory */ public void initFileList(File mFile) { File[] f = mFile.listFiles(); fill(f); } public void fill(File[] files) { fileNameList = new ArrayList<File>(); for (File file : files) { if (isValidFileOrDir(file)) { fileNameList.add(file); } } System.out.println("fileNameList.size===" + fileNameList.size()); fileToStrArr(fileNameList); } /** 将文件夹或文件名字的名称保存到字符串数组当中. */ private String[] fileToStrArr(List<File> fl) { fnList = new ArrayList<String>(); for (int i = 0; i < fl.size(); i++) { String nameString = fl.get(i).getName(); fnList.add(nameString); } System.out.println("fnList.size===" + fnList.size()); return fnList.toArray(new String[0]); } /** 检查是否为合法的文件夹名和文件(文件是否为txt文件) */ private boolean isValidFileOrDir(File file) { if (file.isDirectory()) { return true; } else { String fileName = file.getName().toLowerCase(); if (fileName.endsWith(".txt")) { return true; } } return false; } }
package com.edison.ex; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; public class ViewFile extends Activity { private String filenameString; private static final String gb2312 = "GB2312"; private static final String utf8 = "UTF-8"; private static final String defaultCode = gb2312; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.filebrowser); try { Bundle bunde = this.getIntent().getExtras(); filenameString = bunde.getString("fileName"); refreshGUI(defaultCode); } catch (Exception e) { } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.gb2312: refreshGUI(defaultCode); break; case R.id.utf8: refreshGUI(utf8); break; } return super.onOptionsItemSelected(item); } private void refreshGUI(String code) { TextView tv = (TextView) findViewById(R.id.view_contents); String fileContent = getStringFromFile(code); tv.setText(fileContent); } public String getStringFromFile(String code) { try { StringBuffer sBuffer = new StringBuffer(); FileInputStream fInputStream = new FileInputStream(filenameString); InputStreamReader inputStreamReader = new InputStreamReader( fInputStream, code); BufferedReader in = new BufferedReader(inputStreamReader); if (!new File(filenameString).exists()) { return null; } while (in.ready()) { sBuffer.append(in.readLine() + "\n"); } in.close(); return sBuffer.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } // 读取文件内容 public byte[] readFile(String fileName) throws Exception { byte[] result = null; FileInputStream fis = null; try { File file = new File(fileName); fis = new FileInputStream(file); result = new byte[fis.available()]; fis.read(result); } catch (Exception e) { } finally { fis.close(); } return result; } }
package com.edison.ex; import java.io.File; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class ReadTextActivity extends ListActivity { ListAllFiles mListAllFiles; ArrayAdapter<String> adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mListAllFiles = new ListAllFiles(this); mListAllFiles.initFileList(android.os.Environment .getExternalStorageDirectory()); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListAllFiles.fnList); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Intent intent = new Intent(ReadTextActivity.this, ViewFile.class); Bundle bundle = new Bundle(); File file = mListAllFiles.fileNameList.get(position); if (file.isDirectory()) { File[] f = file.listFiles(); mListAllFiles.fill(f); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListAllFiles.fnList); setListAdapter(adapter); } else { bundle.putString("fileName", file.getAbsolutePath()); intent.putExtras(bundle); startActivityForResult(intent, 0); } } }
最新技术文章: