Ширина по умолчанию для величины поля экспоненты при отсутствии спецификации в противном случае равна двум. Буква экспоненты E
или D
отбрасывается, если для величины экспоненты требуется один символ больше, чем поле экспоненты. (Обратите внимание, что эта форма с отсутствующей буквой экспоненты вполне приемлема для форматированного ввода Фортрана.)
Если вы хотите три символа, то укажите три символа.
write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x
write(*,fmt='(A,E15.3E3)') " fmt= E15.3E3: x = ", x
#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do
# Replace /'s with .'s
class=${class//\//.};
# javap
javap -classpath $jar ${class//.class/};
done
Еще проще было бы
JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
Сначала разархивируйте файл jar, это даст ряд каталогов для каждого пакета, затем примените команду javap для каждого каталога.
Так, например, с помощью tomcat вы можете разархивировать catalina-balancer .jar в webapps \ balancer, а затем используйте
javap -classpath org\apache\webapp\balancer Rule
, что дает
Compiled from "Rule.java" interface org.apache.webapp.balancer.Rule{ public abstract boolean matches(javax.servlet.http.HttpServletRequest); public abstract java.lang.String getRedirectUrl(); }
. Если вам нужно сделать это для всех файлов классов в пакете, вам нужно будет написать сценарий или программу для обхода пути к классам и удаления .class из имен файлов и передать его в javap.
(Было бы довольно просто написать на perl / bash / java).