我从名称为file 1.pdf
,file 2.pdf
等的文件夹中加载了一些文件
我想将它们全部加载到我的程序中。如果我新增了它们的总数,我会这样做:
for(int i=1; i<=100; i++){
File pdfFile = new File("file "+i+".pdf");
//...
}
但我不知道总数。如果没有其他文件,那么条件是什么,然后退出?
do{
File pdfFile = new File("file "+i+".pdf");
//...
}while(//there are files...)
答案 0 :(得分:7)
有两种方法 - 你可以简单地继续增加你的计数器,直到你得到一个不存在的文件,即
int i = 1;
File file;
while((file = new File("file "+i+".pdf")).exists()) {
// do whatever
++i;
}
不那么笨拙的方法是简单地遍历特定目录中的所有文件,只是忽略名称与您的模式不匹配的文件(即,除非您处理文件的顺序很重要)
答案 1 :(得分:1)
你可以捕获异常并打破while循环。最初我回答说:
boolean success = true;
int i = 0;
while(success){
i = i + 1;
try{
File pdfFile = new File("file " + i + ".pdf");
} catch(FileNotFoundException ex){
success = false;
}
}
但是我被告知构造函数不会抛出异常,因此这不起作用。因此,您最好使用下面的答案,正如另一位用户(@cubic)建议的那样。
int i = 0;
File file;
while((file = new File("file " + i + ".pdf")).exists()){
// something with file
i++;
}
答案 2 :(得分:1)
如果您可以访问依赖Apache Commons IO,那么您的代码将如下所示:
// Bind repeater
DataTable dt = objReport.GetCustomRecord();
fn = new List<string>();
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dt.Columns[i].ColumnName != "Maxcount" )
{
fn.Add(dt.Columns[i].ColumnName);
}
}
Repeater1.DataSource = dt;
Repeater1.DataBind();
protected void Repeater1_databinding(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
if (e.Item.FindControl("literalHeader") != null)
{
StringBuilder sb = new StringBuilder();
Literal li = e.Item.FindControl("literalHeader") as Literal;
fieldName().ForEach(delegate(string fn)
{
if (hdnColumnName.Value != fn.ToString())
{
sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort desc\" onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\" >"
+ fn.ToString() + "</a></th>");
}
else
{
if (hdnColumnOrder.Value == "sort asc")
sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort desc\" onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\" >"
+ fn.ToString() + "</a></th>");
else
sb.Append("<th width=\"10%\"> <a id=\"btnCustomerName\" class=\"sort asc\" onclick=\"btnSorts_onclick()\" style=\"cursor:pointer;text-decoration: none !important;\">"
+ fn.ToString() + "</a></th>");
}
});
li.Text = sb.ToString();
}
}
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if (e.Item.FindControl("literals") != null)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
Literal li = e.Item.FindControl("literals") as Literal;
StringBuilder sb = new StringBuilder();
fieldName().ForEach(delegate(string fn)
{
sb.Append("<td>" + drv[fn.ToString()] + "</td>");
});
li.Text = sb.ToString();
}
}
}
答案 3 :(得分:0)
您应该将数字文件计入文件夹
new File(<directory path>).listFiles().length