Flash Builder не будет читать локальный файл JSON., - PullRequest
0 голосов
/ 12 января 2012

Итак, я попытался создать небольшую утилиту для просмотра содержимого файла JSON в простой для понимания форме (для людей, не являющихся специалистами).

У меня Googled далеко и широко, высоко и низко, но каждый пример, показывающий, как использовать файл JSON в Flash Builder, использует службу HTTP, указывающую на файл в Интернете.

Вот я и сижу перед моим MacBook, размышляя, почему я не могу заставить эту работу работать. В документации, которую я нашел (вроде как относящейся к этой проблеме), они всегда показывают примеры Windows, и они, кажется, работают нормально:

C://me/projects/json/my_json.json

Возможно, я полностью упускаю очевидное, но возможно ли это и на Mac?

Я пытался

file:///Users/me/projects/json/my_json.json

Это не работает. Я пробовал использовать синтаксис «разрешения по пути», но служба HTTP, похоже, не допускает ничего, кроме путей к файлам в кавычках.

Кто-нибудь сможет указать мне правильное направление?

1 Ответ

1 голос
/ 12 января 2012

Используйте API File . Это действительно просто, вот небольшой пример кода:

// Get a File reference, starting on the desktop.
// If you have a specific file you want to open you could do this:
// var file:File = File.desktopDirectory.resolvePath("myfile.json")
// Then skip directly to readFile()
var file:File = File.desktopDirectory;

// Add a listener for when the user selects a file
file.addEventListener(Event.SELECT, onSelect);
// Add a listener for when the user cancels selecting a file
file.addEventListener(Event.CANCEL, onCancel);

// This will restrict the file open dialog such that you
// can only open .json files
var filter:FileFilter = new FileFilter("JSON Files", "*.json");

// Open the file browse dialog
file.browseForOpen("Open a file", [filter]);

// Select event handler
private function onSelect(e:Event):void
{
   // Remove listeners on e.currentTarget
   // ...

   // Cast to File
   var selectedFile:File = e.currentTarget as File;
   readFile(selectedFile);
}

private function onCancel(e:Event):void
{
    // Remove listeners on e.currentTarget
    // ...
}

private function readFile(file:File):void
{
   // Read file
   var fs:FileStream = new FileStream();
   fs.open(selectedFile, FileMode.READ);
   var contents:String = fs.readUTFBytes(selectedFile.size);
   fs.close()

   // Parse your JSON for display or whatever you need it for
   parseJSON(contents);
}

Вы намекали на это в своем посте о примерах для Windows, и вы находитесь на Mac, но я прямо укажу здесь: вы должны всегда использовать File API, потому что он кроссплатформенный. Этот код будет одинаково хорошо работать на Windows и Mac.

...