简单的javascript程序读取文件

时间:2015-10-29 19:25:04

标签: javascript

我正在编写一个简单的脚本来读取.txt文件。使它工作有点麻烦,现在我想升级它。基本上我正在寻找一个选项,在文件打开和读取之前暂停程序。我尝试使用while()等待某个变量进行更改,但是当暂停整个程序时 - 无法单击打开的文件。

HTML:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

String inputDateString = vars.get("response time"); //in the format "2013-10-26 09:36:00 AM "
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss a ");
DateTime time = formatter.parseDateTime(inputDateString);
DateTime newtime = time.minusHours(6);
vars.put("newtime", newtime.toString());

使用Javascript:

<html>

<head>
</head>

<body>
<input type="file" id="fileInput">  
<script src="1dn.js"></script>
</body>

</html>

2 个答案:

答案 0 :(得分:-1)

好吧,如果你在函数中包含所有必须在打开和读取文件后必须执行的代码,它将被解析但在你调用函数之前不会被执行。

然后在回调结束时调用函数(在事件监听器的参数中给出的函数)。

编辑:对不起我放restOfCode()的地方不清楚。它必须是内部 onload回调。

您将无法在文件输入上删除事件侦听器,因为如果浏览器不是来自用户的操作,则浏览器实际上会阻止您访问任何客户端本地文件。这是一项防止恶意网站访问访问者的安全措施。文件未经他们同意。

结果:

var string;

window.onload = function() {

    var fileInput = document.getElementById('fileInput');   

    // You need user input for the browser to allow you reading local files.
    // This is a security measure to protect the user.
    fileInput.addEventListener('change', function(e) {      

        var file = fileInput.files[0];      
        var reader = new FileReader();

        reader.onload = function(e) {                   

            string = reader.result;             
            alert(string);

            // At this point only you are sure your file is opened and read.
            restOfCode();
        }

        // Open the file and start reading.
        reader.readAsText(file);
    });
}

// *** wait here until file is opened and read
// the function below is parsed but not executed, since it is not called

function restOfCode() {
    //*** do some other stuff
}

答案 1 :(得分:-1)

您可以使用添加when函数的库,或者如果您愿意,可以在纯JS中自己实现:

function when(conditionFunc, execFunc, interval) {
    if (conditionFunc()) {
        execFunc();
    } else {
        setTimeout(function() { when(conditionFunc, execFunc, interval);}, interval);
    }
}

你可以read more about the function here。像这样使用它:

when(function() {
    return string;
}, function() {
    // do stuff
}, 500);

如果您希望在字符串更改时执行// do stuff,只需将return string;更改为将新字符串值与旧字符串值进行比较的条件。