如何从txt文件中删除文本行?动作脚本

时间:2012-07-23 10:21:21

标签: actionscript-3 flash air builder

早上好!所以这里是基本代码,我从“使用Adobe Flash Professional CS5.5和Flash Builder 4.5进行移动开发”教程中获得。几乎是基本的代码,但那些混蛋并没有提供有关DELETE功能的任何信息。这是我第一次申请,所以需要帮助!

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           height="494" creationComplete="readFile()"> 
<fx:Script> 
<![CDATA[ 


import mx.collections.ArrayCollection; 
[Bindable] public var todo_items:ArrayCollection;     
private function readFile():void 
{ 
    var todoFile:File =File.applicationStorageDirectory.resolvePath("todo.txt"); 

    if (todoFile.exists) 
    { 
        var fs:FileStream = new FileStream(); 
        fs.open(todoFile, FileMode.READ); 
        var result:String = fs.readUTFBytes(fs.bytesAvailable); 
        var items:Array = result.split("\n"); 
        items.pop(); 
        todo_items = new ArrayCollection(items); 
        fs.close(); 
    } 
    else { trace("Aplication cant find the file"); 
    } 
 } 
    private function writeFile():void 
    { 
        var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 


            var fs:FileStream = new FileStream(); 
            fs.open(todoFile, FileMode.APPEND); 


            fs.writeUTFBytes(task_txt.text + "\n"); 


            fs.close(); 
            readFile(); 
    } 
    private function deleteFile():void 
    { 
        //????????????? HEEEEELP         !!!!!!!!!! 
    } 

]]> 
</fx:Script> 


<s:List id="todo_list" left="10" right="10" top="146" bottom="87"       dataProvider="{todo_items}"/> 
<s:Button left="11" right="10" top="69" height="65" label="Save task" click="writeFile()" 
          enabled="{task_txt.text.length > 0}"/> 
<s:TextInput id="task_txt" left="10" right="10" top="10" height="51" prompt="Specify a task"/> 
<s:Button left="10" right="10" bottom="14" label="Delete" 
          click="todo_items.removeItemAt(todo_list.selectedIndex); deleteFile()" 
                        enabled="{todo_list.selectedIndex != -1}"/> 

2 个答案:

答案 0 :(得分:0)

你想做的是

  1. 读入文件中的所有数据,就像readFile一样。
  2. 从该数据中删除您要删除的任何行。
  3. 将数据写回文件 - 就像writeFile一样 - 在FileMode.WRITE模式下,因为你希望它覆盖,而不是追加。
  4. 如果您无法解决这个问题并且需要代码而不是指南,请随时在此处发表评论,我将为您提供的不仅仅是指针。


    readFile中的代码(全部)将文件中的数据读入名为todo_items的ArrayCollection中。

    如果要从文件中删除项目,则需要从该ArrayCollection中删除它(类似todo_items.removeItemAt(index))。

    现在,您有一个ArrayCollection,其中包含您希望在该文件中的数据。此时,您需要模仿writeFile()正在做什么,但是使用FileMode.WRITE,并且您想要写出列表中的每个项目,而不是要添加的文本框中的一个项目。

    private function deleteFile():void 
    { 
        var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 
    
    
            var fs:FileStream = new FileStream(); 
            fs.open(todoFile, FileMode.WRITE); 
    
            for(var item:String in todo_items)
            {
                fs.writeUTFBytes(item + "\n")
            }
    
            fs.close(); 
            readFile(); 
    } 
    

    在一个有点相关的说明 - 我不认为'deleteFile'是你在这里所做的一个好名字。您可能需要删除所选项目的deleteItem()方法,然后是包含上述代码的saveFile()方法。

答案 1 :(得分:-1)

我认为deleteFile方法是为了删除文件?如果是这样,Adobe的参考文档记录了File class and deletion,这通常是在探索课程时开始的好地方。

private function deleteFile():void 
{ 
       var todoFile:File = File.applicationStorageDirectory.resolvePath("todo.txt"); 
       todoFile.deleteFile()
}