从URLLoader到FileStream(反之亦然)

时间:2011-02-20 00:07:25

标签: actionscript-3 air filestream urlloader

我有一个功能使用通过URL Loader硬编码的文件,但我希望能够在Air应用程序中从硬盘驱动器的任何位置选择文件。

    public function loadFile(): Array {
        csv = new URLLoader();
        csv.addEventListener(Event.COMPLETE, completeHandler);
        csv.load(new URLRequest('carelinksample.csv'));
        return results;
    }

和completeHandler当然会将URLRequest中的数据放入一个数组中,我需要它。但是我想用某种Filestream命令替换新的URLRequest(或者如果还有另一种方法可以用Air选择本地文件)。

我有这个代码加载一个本地文件,但我不完全确定如何处理它以使其与URLLoader中的内容一起使用

private var filetype:FileFilter = new FileFilter("CSV Files(*.csv)","*.csv");           

public function chooseFile(event:MouseEvent):void {
                var f:File = File.desktopDirectory;
                f.browseForOpen("Select file to open", [filetype]);
                f.addEventListener(Event.SELECT, function (event:Event):void {
                    var fs:FileStream = new FileStream();
                    fs.open(event.target as File, FileMode.READ);
                    fs.close();
                });

1 个答案:

答案 0 :(得分:1)

此代码应该满足您的需求:

private var _ref : FileReference;    
private function browse() {
    _ref = new FileReference();
    _ref.addEventListener(Event.SELECT, onSelect);
    _ref.browse([new FileFilter("CSV File", "*.csv")]);
}

private function onSelect(event : Event) : void {
    _ref.addEventListener(Event.COMPLETE, onData);
    _ref.load();
}

private function onData(event : Event) : void {
    parse(_ref.data.readUTFBytes(_ref.data.bytesAvailable));
}

private function parse(data : String) : void {

}