Java File.exist()方法不起作用?
更新1:- 大家好,我发现有些人不能提出任何建议,因为问题不太清楚 因此,我简化了他们的代码,并能够再次复制它。现在,只需按住ctrl键c和ctrl键v并相应地设置属性文件Java File.exist()方法不起作用?,java,Java,更新1:- 大家好,我发现有些人不能提出任何建议,因为问题不太清楚 因此,我简化了他们的代码,并能够再次复制它。现在,只需按住ctrl键c和ctrl键v并相应地设置属性文件 package com.test; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import java.text.SimpleDateFormat; import java.util.Date; import java.
package com.test;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
public class ReproduceIssue {
static {
try {
String propertyFilePath = "/home/jioapp/apache-tomcat-7.0.56";
File file1 = new File(propertyFilePath);
URL[] urls = { file1.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle resourceBundle = ResourceBundle.getBundle("TinyOffline",Locale.getDefault(), loader);
String timestamp = new SimpleDateFormat("dd.MM.yyyy-HH.mm.ss").format(new Date());
/** Note: If file already open, moving no longer possible. */
String logFileAbsolutePath = resourceBundle.getString("log4j.absolute.file.path");
System.out.println(logFileAbsolutePath); /** /home/jioapp/apache-tomcat-7.0.56/OfflineLog/TinyOffline.log */
File file = new File(logFileAbsolutePath);
System.out.println(file);/** \home\jioapp\apache-tomcat-7.0.56\OfflineLog\TinyOffline.log */
System.out.println(file.exists());/** false */
if (file.exists()) {
String renameToFile = logFileAbsolutePath + "." + timestamp;
if (!file.renameTo(new File(
renameToFile))) {
System.out.println("Renaming log file failed : " + logFileAbsolutePath);
}
} else {
System.out.println("Unable to open log file : "
+ logFileAbsolutePath);
}
/** Note: If Piwik file already exist then rename it **/
String piwikLogFileAbsolutePath = resourceBundle.getString("sys.piwik.absolute.file.path");
System.out.println(piwikLogFileAbsolutePath);/** /home/jioapp/apache-tomcat-7.0.56/PiwikLog/access.log */
File piwikFile = new File(piwikLogFileAbsolutePath);
System.out.println(piwikFile);/** \home\jioapp\apache-tomcat-7.0.56\PiwikLog\access.log */
System.out.println(piwikFile.exists());/** true */
if (piwikFile.exists()) {
if (!piwikFile.renameTo(new File(piwikLogFileAbsolutePath + "."
+ timestamp))) {
System.out.println("Renaming piwik log file failed : "
+ logFileAbsolutePath);
System.out.println("Stopping the services....");
System.exit(0);
}
} else {
System.out.println("No Piwik access log file exist :"
+ piwikLogFileAbsolutePath);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
TinyOffline.properties
log4j.absolute.file.path=/home/jioapp/apache-tomcat-7.0.56/OfflineLog/TinyOffline.log
sys.piwik.absolute.file.path=/home/jioapp/apache-tomcat-7.0.56/PiwikLog/access.log
我想这可能会有帮助
Java JDK-7.0.79首先尝试检查logFileAbsolutePath中是否保存了字符串。如果resourceBundle.getString返回一些值,请尝试检查它返回的值。在我看来,它不是在对象中返回/存储值。这真的很尴尬,但我只是重写了日志文件和属性文件的TinyOffline文件名,它开始按照预期运行。我假设这可能是由于字符串值中的一些垃圾字符造成的。在调用File.exists之前,您是否尝试过使用System.out.println查看其中的一些字符串?我认为这是一个你可以比我们更容易调试的问题。如果其中一个字符串不是您所期望的,并且您不知道原因,那么您可以询问有关该字符串的特定问题。创建字符串的另一个原因是–您自己经常会发现问题是的,我是SOP文件对象,它正在打印文件路径。但是仍然file.exists方法返回false.FYI上述代码将进入我的初始值设定项类的静态块。Hello@ajb,你检查过我的更新代码吗???Hello@qxz,你检查过我的更新代码吗???是的,我也检查过。一切如期而至。我使用文件对象,它显示提供的文件路径。不是所有的。通常,badHello@Muhammad AhmEd是正确的,请检查我的更新代码。它可能会帮助您…您是否使用Microsoft Word之类的工具来创建属性文件?不要。请注意您使用什么文本编辑器来创建程序将读取的文件,因为有些程序会认为您创建的文件是供人类读取的,并且他们可能会在文件中添加额外的不可见内容来帮助设置显示格式。不,我不认为这是任何工具的bcoz。我知道一些ASCII字符可以改变整个程序,但至少在我的情况下不是这样。它是纯UTF8文件。让我惊讶的是,如果我保留文件名TinyOffline.log,那么它将不起作用,但如果我将其保留为TinyOffline.log或其他任何文件,那么它将起作用。虽然我的应用程序运行在多线程环境中。可能是在该文件上保持锁定的任何守护进程线程。仅供参考,我已删除该文件并再次执行,但没有命运。