<?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}"/>
答案 0 :(得分:0)
你想做的是
FileMode.WRITE
模式下,因为你希望它覆盖,而不是追加。如果您无法解决这个问题并且需要代码而不是指南,请随时在此处发表评论,我将为您提供的不仅仅是指针。
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()
}