当前位置:  编程技术>移动开发
本页文章导读:
    ▪文件管理之资料后缀名识别        文件管理之文件后缀名识别        文件有很多种类型,有音乐文件、视频文件、图片文件、文本文件等,不同类型的文件在android中的打开方式是不一样的,也就是需要不同的软件区打开,.........
    ▪ QVector 跟vector的比较        QVector 和vector的比较QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享。使用non-const操作和函数将引起深拷贝。at()比operator[](),快,因为它不进行深拷贝.Qvector取值.........
    ▪ 彻底解决:Keil编译提醒“File has been changed outside the editor, reload?”提示       彻底解决:Keil编译提示“File has been changed outside the editor, reload?”提示!         如图所示,很多同学在使用keil时都可能会碰到上图中的“File has been changed outside the editor, reload?”提示,很.........

[1]文件管理之资料后缀名识别
    来源: 互联网  发布时间: 2014-02-18
文件管理之文件后缀名识别

        文件有很多种类型,有音乐文件、视频文件、图片文件、文本文件等,不同类型的文件在android中的打开方式是不一样的,也就是需要不同的软件区打开,那么,我们通过String fileName = file.getName;如何判断我们所要打开的文件时什么类型的文件进而采取不同的措施呢?

        不同的文件后缀名并不是唯一的,比如mp3、wmv文件都是音频文件,mp4、avi、rmvb文件都是视频文件,其实要判断文件是什么类型的文件一个函数就可以了,fileName.endsWith(xxx);将后缀名传进去就可以判断了,这样的话,我们可以在代码中写多个String[ ],然后遍历,一个个匹配,当然了,我们可以将这些文件格式放在资源文件中,这样代码就显得简洁多了。

★资源文件的位置


★xml文件的代码

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 图片的后缀名字 -->
    <array name="fileEndingImage">
        <item>.png</item>
        <item>.gif</item>
        <item>.jpg</item>
        <item>.jpeg</item>
        <item>.bmp</item>
    </array>
    
    <!-- 音乐的后缀名字 -->
    <array name="fileEndingAudio">
        <item>.mp3</item>
        <item>.wav</item>
        <item>.ogg</item>
        <item>.midi</item>
        <item>.wma</item>
    </array>
 
    <!-- 压缩包的后缀名字 -->
    <array name="fileEndingPackage">
        <item>.jar</item>
        <item>.zip</item>
        <item>.rar</item>
        <item>.gz</item>
    </array>
    
    <!-- 网页文件的后缀名字 -->
    <array name="fileEndingWebText">
        <item>.htm</item>
   		<item>.html</item>
   		<item>.php</item>
    </array>
    
    <!-- 视频文件的后缀名字 -->
    <array name="fileEndingVideo">
        <item>.mp4</item>
        <item>.rmvb</item>
        <item>.rm</item>
        <item>.mpg</item>
        <item>.avi</item>
        <item>.mpeg</item>
    </array>
</resources>
 

★下面是匹配代码

◇判断类型方法

/**
     * 通过文件名判断是什么类型的文件
     * fileEndings是某一类型的文件后缀名集合
     */
    public boolean checkFileType(String fileName, String[] extendNames){
    	//遍历后缀名称集合
    	for(String end: extendNames){
    		//判断后缀名称是否存在数组中
    		if(fileName.endsWith(end))
    			return true;
    	}
    	//如果后缀名称不存在数组中,返回false
    	return false;
    }

◇调用代码

//取得文件名
    	String fileName = file.getName();
    		
    	//判断是一个文件夹还是一个文件
    	if(file.isDirectory()){
    		//如果是一个文件夹,则设置图片为文件夹图片
    		currentIcon = getResources().getDrawable(R.drawable.folder);
    	}
    	else {
    		//判断文件是否为图片文件
	    	if(checkFileType(fileName, getResources().getStringArray(R.array.fileEndingImage))){
	    		//设置音乐的图标
	    		currentIcon = getResources().getDrawable(R.drawable.image);
	    	}
	    	//判断文件是否为网页文件
	    	else if(checkFileType(fileName, getResources().getStringArray(R.array.fileEndingWebText))){
	    		//设置音乐的图标
	    		currentIcon = getResources().getDrawable(R.drawable.webtext);
	    	}
	    	//判断文件是否为压缩包文件
	    	else if(checkFileType(fileName, getResources().getStringArray(R.array.fileEndingPackage))){
	    		//设置音乐的图标
	    		currentIcon = getResources().getDrawable(R.drawable.packed);
	    	}
	    	//判断文件是否为音乐文件
	    	else if(checkFileType(fileName, getResources().getStringArray(R.array.fileEndingAudio))){
	    		//设置音乐的图标
	    		currentIcon = getResources().getDrawable(R.drawable.audio);
	    	}
	    	//判断文件是否为视频文件
	    	else if(checkFileType(fileName, getResources().getStringArray(R.array.fileEndingVideo))){
	    		//设置音乐的图标
	    		currentIcon = getResources().getDrawable(R.drawable.video);
	    	}
	    	//如果为其它文件
	    	else {
	    		//默认图标
	    		currentIcon = getResources().getDrawable(R.drawable.text);
	    	}
    	}



    
[2] QVector 跟vector的比较
    来源: 互联网  发布时间: 2014-02-18
QVector 和vector的比较
QVector和vector的比较:

Qvector默认使用隐式共享,可以用setSharable改变其隐式共享。使用non-const操作和函数将引起深拷贝。at()比operator[](),快,因为它不进行深拷贝.Qvector取值都会检查越界问题。

看看简单的例子:

QVector<int>  vecA;

QVector<int>  vecB;

vecA.push_back(1);

vecA.push_back(10);

 

       vecB= vecA;    

 

       cout<<"&vecA.at(0) : "<<&vecA.at(0)<<endl;

       cout<<"&vecB.at(0) : "<<&vecB.at(0)<<endl;

 

 

QVector<int>  vecC;

vecA.setSharable(false);

vecC = vecA;

cout<<"&vecA.at(0): "<<&vecA.at(0)<<endl;

cout<<"&vecC.at(0): "<<&vecC.at(0)<<endl;

 

对比发现,禁用了隐式共享之后,元素的地址就不再一样了。

 

Vector

Vector没有隐式共享,operator [ ]不检查越界,at()才检查越界。

 

 

构造函数:

Vector的构造函数C++98版:

explicit vector (const allocator_type& alloc = allocator_type());
explicit vector (size_type n, const value_type& val = value_type(),
                 const allocator_type& alloc = allocator_type());
template <class InputIterator>
         vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());
vector (const vector& x);

C++11版:

explicit vector (const allocator_type& alloc = allocator_type());
explicit vector (size_type n);
         vector (size_type n, const value_type& val,
                 const allocator_type& alloc = allocator_type());
template <class InputIterator>
  vector (InputIterator first, InputIterator last,
          const allocator_type& alloc = allocator_type());
vector (const vector& x);
vector (const vector& x, const allocator_type& alloc);
vector (vector&& x);
vector (vector&& x, const allocator_type& alloc);
vector (initializer_list<value_type> il,
       const allocator_type& alloc = allocator_type());

Qvector的构造函数:

QVector::QVector ()

QVector::QVector ( int size )

QVector::QVector ( int size, const T & value )

QVector::QVector ( const QVector<T> & other )

QVector::QVector ( std::initializer_list<T> args )

通过比较我们发现,vector可以指定内存分配器,而且Qvector少了类似template <class InputIterator>
         vector (InputIterator first, InputIterator last,构造函数。所以以下代码是肯定不行的:

QVector<int> second (4,100);                     

QVector<int> third (second.begin(),second.end());

int myints[] = {16,2,77,29};

QVector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );

 
迭代器:
Vector迭代器begin C++98版本:
     iterator begin();
const_iterator begin() const;
C++11版:
  iterator begin() noexcept;
const_iterator begin() const noexcept;
noexcept指定这两个函数是不能抛出异常的。
 
Vector迭代器end C++98版本:
    iterator end();
const_iterator end() const;
C++11版:
      iterator end() noexcept;
const_iterator end() const noexcept;
 
Vector迭代器rbegin C++98版本:
        reverse_iterator rbegin();
const_reverse_iterator rbegin() const;
C++11版:
   reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
noexcept指定这两个函数是不能抛出异常的。
 
Vector迭代器rend C++98版本:
reverse_iterator rend();
const_reverse_iterator rend() const
 
C++11版:
   reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
常量迭代器只要C++11版本的:
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
Qvector的迭代器:
iterator
begin ()
const_iterator
begin () const
const_iterator
constBegin () const
const_iterator
constEnd () const
iterator
end ()
const_iterator
end () const
Qvector没有反向迭代器。
 
Vector有而Qvector没有的函数或功能:
size_type max_size() const;
返回vector可以存在最大元素个数。
void shrink_to_fit();   这个函数是C++11独有的
使得vector减少其容量为适合大小的容量。
赋值函数:
C++98:
template <class InputIterator>
  void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type& val);
C++11:
template <class InputIterator>
  void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type& val);
void assign (initializer_list<value_type> il);
下面两个函数其实跟insert差不多
template <class... Args>
iterator emplace (const_iterator position, Args&&... args);
 
template <class... Args>
  void emplace_back (Args&&... args);
 
 
Qvector有而vector没有的函数:
int QVector::count ( const T & value ) const
返回Qvector中值为value的个数。
bool QVector::contains ( const T & value ) const
判断Qvector中是否包含元素value,要求Qvector中的类型必须支持 比较操作==
bool QVector::endsWith ( const T & value ) const
判断Qvector中是否以value值结尾。
int QVector::indexOf ( const T & value, int from = 0 ) const
int QVector::lastIndexOf ( const T & value, int from = -1 ) const
QVector<T> QVector::mid ( int pos, int length = -1 ) const
void QVector::squeeze ()
该函数释放不用的内存,类似于vector的void shrink_to_fit()
 
bool QVector::startsWith ( const T & value ) const
 
QList<T> QVector::toList () const
std::vector<T> QVector::toStdVector () const
QVector<T> QVector::fromList ( const QList<T> & list ) [static]
QVector<T> QVector::fromStdVector ( const std::vector<T> & vector ) [static]
 
bool QVector::operator!= ( const QVector<T> & other ) const
QVector<T> QVector::operator+ ( const QVector<T> & other ) const
QVector<T> & QVector::operator+= ( const QVector<T> & other )
QVector<T> & QVector::operator+= ( const T & value )
QVector<T> & QVector::operator<< ( const T & value )
QVector<T> & QVector::operator<< ( const QVector<T> & other )
QVector<T> & QVector::operator= ( const QVector<T> & other )
bool QVector::operator== ( const QVector<T> & other ) const
 

    
[3] 彻底解决:Keil编译提醒“File has been changed outside the editor, reload?”提示
    来源: 互联网  发布时间: 2014-02-18
彻底解决:Keil编译提示“File has been changed outside the editor, reload?”提示!

        如图所示,很多同学在使用keil时都可能会碰到上图中的“File has been changed outside the editor, reload?”提示,很令人烦心。当遇到此提示,首先不要郁闷,请先看清楚文件的路径及名称。比如:这个提示的文件名是UCOSII+STM32+12864.axf,然后再看下图:

        大家看见上图所示的文件名UCOSII+STM32+12864.axf了吗?直接在此图中关掉它就好了,此方法非常有效,百试不爽!注意:那个UCOSII+STM32+12864.htm文件也会导致如题的提示,也需要关掉。问题解决。希望对大家有用!


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3